模板-所列参数的条件
Templates - condition upon listed parameters
我该怎么做呢?
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
,如果T2
是MagicFlagTypeThatNobodyElseIsSupposedToUse
,则blahblah
解析为int
,否则为T2
。(你必须自己实现blahblah
,这是一个非常简单的特征类)。
然后在代码中使用RealT2
。如果RealT2
与T2
相同,则可以检测是否传入了T2
。使用标准的技巧来添加/删除基于编译时布尔条件的方法(通常通过继承),或者使用SFINAE来阻止任何匹配你的方法。
如果你想根据不同的模板参数创建一个具有不同组成的结构体,你可能会在c++ 11中寻找可变模板
http://www.cplusplus.com/articles/EhvU7k9E/相关文章:
- 如果条件,当我想第二个参数时
- 有条件地将默认参数传递给函数(使用"?"运算符)
- 在 constexpr-if 条件下比较 constexpr 函数参数会导致错误
- 用于根据条件选择编译时类型的可变参数模板
- 我可以有条件地使用多个参数吗?
- 在解压缩可变参数模板时避免"recursive"函数调用,直到运行时条件
- 使用 std::条件根据模板参数选择成员类型
- 具有条件的C 模板非类型参数
- 如何避免参数数量依赖于条件的调用分支?
- 有条件的操作员从其参数的副本中返回值
- 根据模板参数条件 C++17 创建成员别名
- 当条件为真时,有没有办法连接宏参数
- C++:无法使用条件类型在模板函数中使用 'double' 类型的 lvalue 初始化 'char*' 类型的参数
- 参数大小可变的函数:如何有条件地设置一些参数?
- 根据数值模板参数有条件地编译转换运算符
- 如果参数条件为 true,则阻止执行返回函数
- 在哪些条件下,我们将指针作为函数参数
- 基于模板类型参数的条件成员签名和实现
- 有条件地将基类引用参数视为派生类并将其返回
- c++预处理器条件参数