Использование 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>(...)
Это хорошо, хорошо или, может быть, единственный способ?

Привет

1 ответ

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

Например, is_base_of

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

Другие вопросы по тегам