【问题标题】:Boost Preprocessor - Pass BOOST_PP_ENUM_PARAMS a static const int?Boost Preprocessor - 将 BOOST_PP_ENUM_PARAMS 传递给静态 const int?
【发布时间】:2012-07-19 23:23:16
【问题描述】:

我想要这样的东西:

class MyClass
{
    public:
       static const int n = some_traits_class<SomeClass>::value;

       template <BOOST_PP_ENUM_PARAMS(MyClass::n, typename P)>
       void operator()( BOOST_PP_ENUM_BINARY_PARAMS(MyClass::n, const P, & p) )
       {
          ....
       }
}

编译器似乎不喜欢这样 - 是否有某种修复方法可以到达我想要的位置?

【问题讨论】:

  • 预处理器不知道变量。

标签: c++ boost boost-preprocessor


【解决方案1】:

不,BOOST_PP_ENUM_PARAMS 的第一个参数必须是整数:实际的整数标记或扩展为 1 的宏的名称。

宏替换发生在编译器开始解析代码和评估整型常量表达式之前很久(在预处理期间评估的唯一常量表达式是出现在 #if#elif 指令中的那些,它们具有一组受限的操作,可以使用)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 2016-06-26
    • 1970-01-01
    • 2013-10-15
    • 2018-08-09
    • 2020-04-13
    相关资源
    最近更新 更多