模板-所列参数的条件

Templates - condition upon listed parameters

本文关键字:条件 参数 -所 模板      更新时间:2023-10-16

我该怎么做呢?

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,如果T2MagicFlagTypeThatNobodyElseIsSupposedToUse,则blahblah解析为int,否则为T2。(你必须自己实现blahblah,这是一个非常简单的特征类)。

然后在代码中使用RealT2。如果RealT2T2相同,则可以检测是否传入了T2。使用标准的技巧来添加/删除基于编译时布尔条件的方法(通常通过继承),或者使用SFINAE来阻止任何匹配你的方法。

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

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