C3857不允许使用多类型参数列表编译器错误

C3857 multiple type parameter lists are not allowed Compiler error

本文关键字:类型参数列表 编译器 错误 不允许 C3857      更新时间:2023-10-16

这个片段导致了上面的错误,为什么?我该怎么修?

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

这对你来说是否可以接受取决于你最初希望得到什么。

相关文章: