您真正想要的是专业化您的模板。在您的示例中,您将编写:
template<>
class Foo<int, string>
{
string MyMethod(whatever...);
};
你也可以使用 enable_if:
template<typename A, typename B>
class Foo
{
typename boost::enable_if<
boost::mpl::and_<
boost::mpl::is_same<A, int>,
boost::mpl::is_same<B, string>
>,
string>::type MyMethod(whatever...){}
};
如果没有重载,也可以使用 static_assert:
template<typename A, typename B>
class Foo
{
string MyMethod(whatever...)
{
static_assert(your condition here, "must validate condition");
// method implementation follows
}
};
当您尝试调用 MyMethod 并且未设置条件时,这将产生编译错误。