2014-10-30 54 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

肯定的。它沒有錯......但這是一種好方法還是唯一的方法? – 2014-10-30 10:11:18

+0

這可能不是那麼好,記得static_cast是有效的兩種方式,reinterpret_cast在這裏完全沒有根據(你需要另一個static_cast)。 – 2014-10-30 10:40:39

回答

0

您試圖解決一個不需要解決的問題。由於C++ 11,我們有類型特徵,允許我們在Template Metaprogramming中明確地檢查這樣的事情。

例如,is_base_of

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

+1

此問題*不*標記爲C++ 11。 – vz0 2014-10-30 10:16:22

+0

也許C++ 11可以做得更好,但如果我不被允許使用C++ 11的新特性呢? – 2014-10-30 10:19:08

+0

如果他僅限於C++ 03,總會有BOOST。 – BlamKiwi 2014-10-30 10:19:11