不允许C3857多种类型参数列表编译错误

时间:2015-03-05 16:29:49

标签: c++

这个片段导致上述错误,为什么?我该如何解决呢?

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:不允许使用多个类型参数列表

1 个答案:

答案 0 :(得分:3)

看起来你正在尝试声明一个“模板变量”,但是没有这样的东西。成员变量(或任何其他变量)本身不能是模板。但它可以是类模板的成员。也许您可以将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(){}
};

这对你来说是否可以接受取决于你希望得到的东西。