2012-07-19 72 views
0

我想是这样的:Boost预处理器 - 传递BOOST_PP_ENUM_PARAMS一个静态常量int?

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)) 
     { 
      .... 
     } 
} 

编译器似乎并不喜欢这一点 - 是有某种固定的去的地步,我想是什么?

+0

预处理器不知道变量。 – Xeo 2012-07-19 23:26:33

回答

0

不,BOOST_PP_ENUM_PARAMS的第一个参数必须是整数:实际整数标记或展开为1的宏的名称。编译器开始分析代码和评估积分常量表达式之前

宏替换发生长(预处理期间评估的唯一常量表达式是那些出现在#if#elif指令,它具有有限的一组操作的可使用的)。