我该怎么做评论想要的?
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){}
};
答案 0 :(得分:3)
请勿将T2
设为int
。而是将其设置为MagicFlagTypeThatNobodyElseIsSupposedToUse
。
然后,在template
中,创建typedef blahblah RealT2
,blahblah
如果int
为T2
则MagicFlagTypeThatNobodyElseIsSupposedToUse
解析为T2
,blahblah
1}}否则。 (你必须自己实现RealT2
,这是一个非常简单的特质类。)
然后在代码中使用T2
。如果RealT2
与T2
相同,您可以检测是否已传入{{1}}。使用标准技巧根据编译时布尔条件(通常通过继承)添加/删除方法,或使用SFINAE阻止符合您方法的任何人。
答案 1 :(得分:0)
如果你想根据不同的模板参数创建一个具有不同组成的结构,你可能正在寻找C ++ 11中的可变参数模板