Название: checkFirstBase<>() Отправлено: Akon от Сентябрь 13, 2010, 13:54 Данный шаблон функции нужен для проверки корректности, если используется downcast с помощью reinterpret_cast<>() (в целях оптимизации).
Код: /// Checks that \a BaseT is first base class of \a DerivedT. Another words, the function template По логике, такая проверка может быть осуществлена в compile-time. Но сходу у меня это сделать не получилось :( Название: Re: checkFirstBase<>() Отправлено: navrocky от Сентябрь 15, 2010, 00:26 Код: <<< Может привести к виду safe_reinterpret_cast<B>(a) как в остальных случаях? Цитировать По логике, такая проверка может быть осуществлена в compile-time. Но сходу у меня это сделать не получилось :( boost::is_base_of что-то похожее, можно почерпнуть оттуда идею. Название: Re: checkFirstBase<>() Отправлено: Akon от Сентябрь 15, 2010, 11:55 Цитировать Может привести к виду safe_reinterpret_cast<B>(a) как в остальных случаях? ДаЦитировать boost::is_base_of что-то похожее, можно почерпнуть оттуда идею. boost::type_traits мне не помог (мож чего проглядел).boost::is_base_of в таких случаях, при downcast, всегда будет говорить "да". Важно установить, что при downcast'e к базовому классу численное значение указателя не изменится. Код: class A {...}; Т.е. в то время как сами указатели равны (pb == pc), их численные значения в общем случае не равны (pb_value != pc_value). Название: Re: checkFirstBase<>() Отправлено: navrocky от Сентябрь 15, 2010, 12:11 Цитировать boost::type_traits мне не помог (мож чего проглядел). Я тоже ничего не нашел, но я имел ввиду что можно подсмотреть идею там и попытаться сделать свое.boost::is_base_of в таких случаях, при downcast, всегда будет говорить "да". |