我该怎么做评论想要的?
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
解析为int
if T2
is MagicFlagTypeThatNobodyElseIsSupposedToUse
,T2
否则。(你必须blahblah
自己实现,这是一个非常简单的特征类)。
然后RealT2
在您的代码中使用。如果与 相同,则可以检测是否T2
传入。使用标准技巧根据编译时布尔条件(通常通过继承)添加/删除方法,或使用 SFINAE 阻止与您的方法匹配的任何人。RealT2
T2
如果您想根据不同的模板参数制作具有不同组合的结构,您可能正在寻找 C++11 中的可变参数模板