我想知道是否有任何方法限制为我的情况下使用自定义条件生成模板的代码我想要只在模板类T由类栏继承时调用foo(类似这样)
template <class T:public bar> void foo()
{
// do something
}
Run Code Online (Sandbox Code Playgroud)
您可以T使用"替换失败不是错误"(SFINAE)来限制:
template <typename T>
typename std::enable_if<std::is_base_of<bar, T>::value>::type foo()
{
}
Run Code Online (Sandbox Code Playgroud)
如果T不是派生的bar,则函数模板的特化将失败,并且在重载解析期间不会考虑它. std::enable_if并且std::is_base_of是即将推出的修订版C++ 0x中添加的C++标准库的新组件.如果您的编译器/标准库实现尚不支持它们,您也可以在C++ TR1或Boost.TypeTraits中找到它们.