首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不允许C3857多类型参数列表编译错误

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

Stack Overflow用户
提问于 2015-03-05 16:29:49
回答 1查看 2.9K关注 0票数 1

这个片段会导致上面的错误,为什么?我怎么才能修好它。

代码语言:javascript
运行
复制
class SimpleLogger
{

public:
    enum{ LogSeverityLevel = SWB_LOG_LEVEL };

    template<int level>
   out_policy<bigger_policy<level, SWB_LOG_LEVEL>::value> out; //C3857

   ~SimpleLogger(){}
};

编辑:正如我们所问的,定义更大,编译器的错误也更准确。

代码语言:javascript
运行
复制
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:不允许多个类型的参数列表

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-05 16:33:43

看起来您正在尝试声明一个“模板变量”,但是没有这样的事情。成员变量(或任何其他变量)不能单独成为模板。不过,它可以是类模板的成员。也许您可以将template <int level>应用于类,将SimpleLogger转换为由level值参数化的类模板:

代码语言:javascript
运行
复制
template <int level>
class SimpleLogger
{
public:
  enum{ LogSeverityLevel = SWB_LOG_LEVEL };

  out_policy<bigger_policy<level, SWB_LOG_LEVEL>::value> out;

  ~SimpleLogger(){}
};

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28882812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档