想知道是否可以使用可以分支的模板函数,具体取决于类型是否来自特定类。这大致是我的想法:
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
}
如果有任何想法让我知道! :)
编辑:我应该添加,我不想实例化/构造给定对象只是为了检查它的类型。
答案 0 :(得分: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
}
}
答案 1 :(得分:2)
正如@Lightness所说,type_traits就是答案。
C ++ 11包含了boost
type_trait:http://en.cppreference.com/w/cpp/types/is_base_of