Использование 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