2012-12-30 118 views
4

想知道是否有可以分支的模板函數,具體取決於類型是否從特定類派生。這大致是我在想什麼:C++編譯時類型檢查

class IEditable {}; 

class EditableThing : public IEditable {}; 

class NonEditableThing {}; 

template<typename T> 
RegisterEditable(string name) { 
    // If T derives from IEditable, add to a list; otherwise do nothing - possible? 
} 


int main() { 
    RegisterEditable<EditableThing>("EditableThing"); // should add to a list 
    RegisterEditable<NonEditableThing>("NonEditableThing"); // should do nothing 
} 

如果有人有任何想法,讓我知道! :)

編輯:我要補充,我不想實例/構造給定的對象只是爲了檢查其類型。

+1

http://www.boost.org/doc/libs/1_52_0/libs/ type_traits/doc/html/boost_typetraits/reference/is_base_of.html –

+0

有趣 - 將檢查出來,聽起來很有希望。 – QuadrupleA

回答

4

下面是std::is_base_of一個實現:

#include <type_traits> 

template <typename T> 
void RegisterEditable(string name) { 
    if (std::is_base_of<IEditable, T>::value) { 
     // add to the list 
    } 
} 
+0

謝謝 - 剛剛把我的頭纏在了type_traits周圍,那正是我想要的。不幸的是,它引發了我想到的設計中的另一個問題,但我會看看是否可以單獨分類。 – QuadrupleA