2014-10-30 7 views
-2

Что касается этого вопроса: When to use reinterpret_cast?Использование reinterpret_cast для проверки наследования во время компиляции

Я нашел н. как это:

template<typename T> bool addModuleFactoryToViewingFactory(ViewingPackage::ViewingFactory* pViewingFactory) 
{ 
static_cast<ModuleFactory*>(reinterpret_cast<T*>(0)); // Inheritance compile time check 

    ... 
} 

Это хороший способ проверить, может ли T быть отлиты в ModuleFactory во время компиляции?
Я имею в виду, чтобы проверить, помещает ли программист действительный материал в <> из addModuleFactoryToViewingFactory<T>(...)
Это хорошо, хорошо или, может быть, единственный способ?

Приветствия

+0

да. это не так ... но может быть, это хороший способ или единственный? –

+0

Возможно, это не так хорошо, помните, что static_cast действителен в обоих направлениях, а reinterpret_cast здесь совершенно необоснован (вам нужен другой static_cast). –

ответ

0

Вы пытаетесь решить проблему, которая не нужно решать. Начиная с C++ 11, у нас есть Type Traits, которые позволяют нам точно проверять такие вещи в шаблоне Metaprogramming.

Например, is_base_of

http://en.cppreference.com/w/cpp/types/is_base_of

+1

Этот вопрос * не * помечен как C++ 11. – vz0

+0

Возможно, C++ 11 может сделать лучше, но что, если мне не разрешено использовать новые возможности C++ 11? –

+0

Если он ограничен C++ 03, всегда есть BOOST. – BlamKiwi