参数处的类型/值与Template不匹配
type/value mismatch at argument with Template
我正在编写一些c++模板代码,以替换当前源中的if-else条件。在这里,我基于两个条件推导Helper数据类型,1。is建议2。简单或复杂
参见以下模板代码:
template<bool isAdvice, class SH, class CH>
class IfThenElse;
template<class SH, class CH>
class IfThenElse<true, SH, CH>
{
public:
typedef SH Helper;
};
template<class SH, class CH>
class IfThenElse<false, SH, CH>
{
public:
typedef CH Helper;
};
template <bool isAdvice, bool SimpleOrComplex>
class DeriveHelper
{
public:
typedef typename IfThenElse<isAdvice,
IfThenElse<SimpleOrComplex, SimpleHelper, ComplexHelper>::Helper,
IfThenElse<SimpleOrComplex, SimpleNoAdvHelper, ComplexNoAdvHelper>::Helper>::Helper DerivedHelper;
};
然而,在编译时出现此错误:
template.cpp:135: error: type/value mismatch at argument 2 in template parameter list for 'template<bool isTradeAdvice, class SH, class GH> struct IfThenElse'
template.cpp:135: error: expected a type, got 'IfThenElse::Helper'
template.cpp:135: error: type/value mismatch at argument 3 in template parameter list for 'template<bool isTradeAdvice, class SH, class GH> struct IfThenElse'
template.cpp:135: error: expected a type, got 'IfThenElse::Helper'
有人能告诉我原因吗?
您应该为两个模板类型参数IfThenElse
预先设置一个typename
关键字,就像为第一个所做的那样
template <bool isAdvice, bool SimpleOrComplex>
class DeriveHelper
{
public:
typedef typename IfThenElse<isAdvice,
typename IfThenElse<SimpleOrComplex, SimpleHelper, ComplexHelper>::Helper,
^^^^^^^^
typename IfThenElse<SimpleOrComplex, SimpleNoAdvHelper, ComplexNoAdvHelper>::Helper>::Helper DerivedHelper;
^^^^^^^^
};
相关文章:
- 着色器纹理值与创建纹理时写入的值不同
- 模板允许左值与右值引用绑定
- 为什么我的数组值与此处的全局变量不匹配?
- C++数据成员:值与指针
- 将用户值与枚举中的值进行比较
- 将三角函数的正确值与matlab进行比较
- 将流运算符与Template类一起使用
- 防止凭空值与内存屏障C++
- 按值与右值引用返回
- 初始值设定项列表与构造函数赋值与变量定义
- 将迭代器值与 std::min 一起固定到 end()
- 布尔值与虚空*在同一对象上投射
- 地址处的 C++ 值与函数调用后的预期值不同
- 对两个案例标签使用相同的值与对单个案例使用多个案例标签有什么区别?
- 在 C++ 中获取同一公式的值与在 C# 中获取的值不同
- 模板化函数无法将值与 -1 相乘
- 如何使"days-since-epoch"值与 std::chrono 配合使用?
- 将值与数组元素进行比较
- 如何将值与模板进行比较并在C 中提升
- 参数处的类型/值与Template不匹配