我该怎么做评论想要的?
template<typename T1, typename T2=int>
struct foo
{
//only define foo function if T2 was explictly listed by client
//(even if it was explictly listed as int)
//what should be inside "enable_if"?
foo(T1 t1, T2 t2){}
};
不要设置T2为int. 相反,将其设置为MagicFlagTypeThatNobodyElseIsSupposedToUse.
然后,在您的 中template,创建一个typedef blahblah RealT2, whereblahblah解析为intif T2is MagicFlagTypeThatNobodyElseIsSupposedToUse,T2否则。(你必须blahblah自己实现,这是一个非常简单的特征类)。
然后RealT2在您的代码中使用。如果与 相同,则可以检测是否T2传入。使用标准技巧根据编译时布尔条件(通常通过继承)添加/删除方法,或使用 SFINAE 阻止与您的方法匹配的任何人。RealT2T2
如果您想根据不同的模板参数制作具有不同组合的结构,您可能正在寻找 C++11 中的可变参数模板