模板 - 条件列出的参数

时间:2013-06-06 17:08:18

标签: c++ c++11

我该怎么做评论想要的?

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){}
};

2 个答案:

答案 0 :(得分:3)

请勿将T2设为int。而是将其设置为MagicFlagTypeThatNobodyElseIsSupposedToUse

然后,在template中,创建typedef blahblah RealT2blahblah如果intT2MagicFlagTypeThatNobodyElseIsSupposedToUse解析为T2blahblah 1}}否则。 (你必须自己实现RealT2,这是一个非常简单的特质类。)

然后在代码中使用T2。如果RealT2T2相同,您可以检测是否已传入{{1}}。使用标准技巧根据编译时布尔条件(通常通过继承)添加/删除方法,或使用SFINAE阻止符合您方法的任何人。

答案 1 :(得分:0)

如果你想根据不同的模板参数创建一个具有不同组成的结构,你可能正在寻找C ++ 11中的可变参数模板

http://www.cplusplus.com/articles/EhvU7k9E/