0

私はこのようなものが欲しいです:

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

コンパイラはこれを好まないようです-私がなりたい場所に到達するための何らかの修正はありますか?

4

1 に答える 1

0

いいえ、 の最初の引数は整数でBOOST_PP_ENUM_PARAMSなければなりません: 実際の整数トークンか、1 に展開されるマクロの名前です。

マクロ置換は、コンパイラがコードの解析と整数定数式の評価を開始するずっと前に行われます (前処理中に評価される唯一の定数式は、#ifor#elifディレクティブに表示されるものであり、使用できる操作のセットが制限されています)。

于 2012-07-19T23:29:38.193 に答える