我该怎么做才能达到评论的要求?
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
。
然后,在您的模板
中,创建一个typedef blahblah RealT2
,其中blahblah
解析为int
,如果T2
为 MagicFlagTypeThatNobodyElseIsSupposedToUse
,否则为 T2
。 (你必须自己实现 blahblah
,这是一个非常简单的 traits 类)。
然后在您的代码中使用 RealT2
。如果 RealT2
与 T2
相同,则可以检测是否传入了 T2
。使用标准技巧根据编译时 bool 条件(通常通过继承)添加/删除方法,或使用 SFINAE 阻止任何匹配您的方法的人。
关于c++ - 模板 - 以列出的参数为条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16968092/