0

我该怎么做评论想要的?

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

2 回答 2

3

不要设置T2int. 相反,将其设置为MagicFlagTypeThatNobodyElseIsSupposedToUse.

然后,在您的 中template,创建一个typedef blahblah RealT2, whereblahblah解析为intif T2is MagicFlagTypeThatNobodyElseIsSupposedToUseT2否则。(你必须blahblah自己实现,这是一个非常简单的特征类)。

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

于 2013-06-06T17:34:04.467 回答
0

如果您想根据不同的模板参数制作具有不同组合的结构,您可能正在寻找 C++11 中的可变参数模板

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

于 2013-06-06T17:17:01.470 回答