4

想知道是否有可能有一个模板函数,它可以根据类型是否派生自特定类而分支。以下是我的大致想法:

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
}

如果有人有任何想法,请告诉我!:)

编辑:我应该补充一点,我不想实例化/构造给定的对象只是为了检查它的类型。

4

2 回答 2

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
    }
}
于 2012-12-30T20:25:34.160 回答
2

正如@Lightness 所指出的, type_traits 就是答案。

C++11 包含了boosttype_trait:http ://en.cppreference.com/w/cpp/types/is_base_of

于 2012-12-30T20:14:46.050 回答