C3857不允许使用多类型参数列表编译器错误
C3857 multiple type parameter lists are not allowed Compiler error
这个片段导致了上面的错误,为什么?我该怎么修?
class SimpleLogger
{
public:
enum{ LogSeverityLevel = SWB_LOG_LEVEL };
template<int level>
out_policy<bigger_policy<level, SWB_LOG_LEVEL>::value> out; //C3857
~SimpleLogger(){}
};
编辑:正如所要求的,的定义更大,并且确切的编译器错误
struct is_bigger_equal;
struct is_not_bigger_equal;
template<int first, int second>
struct bigger_policy
{
enum{ value = bigger_policy<first - 1, second - 1>::value };
};
template<>
struct bigger_policy<0, 0>
{
enum{ value = 1 };
};
template<int second>
struct bigger_policy<0,second>
{
enum{ value = 1 };
};
template<int first>
struct bigger_policy<first, 0>
{
enum{ value = 0 };
};
确切的错误是c3857:不允许有多个类型的参数列表
看起来您正试图声明一个"模板变量",但实际上并没有。成员变量(或任何其他变量)本身不能是模板。不过,它可以是类模板的成员。也许您可以将template <int level>
应用于类,将SimpleLogger
变成由level
值参数化的类模板:
template <int level>
class SimpleLogger
{
public:
enum{ LogSeverityLevel = SWB_LOG_LEVEL };
out_policy<bigger_policy<level, SWB_LOG_LEVEL>::value> out;
~SimpleLogger(){}
};
这对你来说是否可以接受取决于你最初希望得到什么。
相关文章:
- C++模板/别名 - 模板参数列表中参数 1 处的类型/值不匹配
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- 生成包含给定类型的 N 个参数的可变参数列表的最佳方法?
- 为什么在 ctor 的参数列表中将成员"x"的类型替换为"decltype(x)"会破坏类模板参数推导?
- 没有函数模板的实例"max"与参数列表参数类型匹配(int、int)
- 将参数列表未知的可变参数模板类型定义为 std::map 值类型
- 模板参数列表中参数 3 处的类型/值不匹配
- 为什么在函数参数类型中使用模板参数包作为其模板参数列表无法显式指定
- 带有 std::function 的 ADL:可以通过 std::function 参数列表中的类型找到采用 std::function 对象的函数吗?
- 编译器在 const ref 类型参数上使用临时对象时是否应该警告不安全的行为?
- 模板参数列表中只有一个类型名称是什么意思?
- 如何将 const 应用于 C++ 中参数列表之外的模板参数类型?
- C - 宏参数中参数列表中的带状类型
- C++如何在模板中推断可调用对象的类型(参数列表和返回值)
- 有人能解释一下特殊的std::函数模板参数列表语法(这个奇怪的类型(Types..))吗
- C++ 可变参数模板和模板模板参数:错误:模板参数列表中参数 1 处的类型/值不匹配
- 如何在变量函数参数列表中检测给定类型的参数的可用性,并在处理完所有参数后采取行动
- C3857不允许使用多类型参数列表编译器错误
- 使用模板类型参数列表中的TYPE
- 使用模板类型参数列表重载模板函数