Boost预处理器-将Boost _PP_ENUM_PARAMS传递一个静态常量int

Boost Preprocessor - Pass BOOST_PP_ENUM_PARAMS a static const int?

本文关键字:Boost 一个 int 常量 静态 处理器 预处理 PP PARAMS ENUM      更新时间:2023-10-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) )
       {
          ....
       }
}

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

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

宏替换早在编译器开始解析代码和计算整数常量表达式之前就发生了(在预处理过程中计算的唯一常量表达式是出现在#if#elif指令中的常量表达式,它们有一组有限的操作可供使用)。

相关文章: