这个片段导致上述错误,为什么?我该如何解决呢?
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:不允许使用多个类型参数列表
答案 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(){}
};
这对你来说是否可以接受取决于你希望得到的东西。