这个问题类似于: c++ template specialization for all subclasses 而不是模板化的函数,现在我有一个模板化类的成员函数,它需要根据类模板的基类做不同的事情
template<typename T>
class xyz
{
void foo()
{
if (T is a subclass of class bar)
do this
else
do something else
}
}
我找不到一个易于理解的boost :: enable_if教程。所以我无法为这个小修改获得正确的语法
答案 0 :(得分:4)
您可以使用标记调度:
template <typename T> class xyz
{
public:
void foo()
{
foo( typename boost::is_base_of<bar,T>::type());
}
protected:
void foo( boost::mpl::true_ const& )
{
// Something
}
void foo( boost::mpl::false_ const& )
{
// Some other thing
}
};
请注意,使用enable_if标记调度通常优于SFINAE,因为在选择适当的重载之前,enable_if需要线性数量的模板实例化。
在C ++ 11中,您可以使用这些boost元函数的std :: equivalent。