Использование reinterpret_cast для проверки наследования во время компиляции

Относительно этого вопроса: Когда использовать reinterpret_cast?

Я нашел sth. например:

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

  ...
}

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

Привет

Ответ 1

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

Например, is_base_of

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