0

次のユースケースがあります

#define ConstantDouble( T )\
 T( Alert, c_alert )

 // I want to generate #define macro's dynamically
#define T( x, y ) #define #x y   <-- Error
ConstantDouble( T )
#undef T 

#define Constant( x ) Constants::x ;   <-- x is Alert and I want the prev #define to     kick in and convert this to c_alert

// Want to generate members variables directly 
class Constants
{
    #define T( x, y ) static double y;
    ConstantDouble( T )
    #undef T
};

これには回避策がありますか?

私の名前にこのようなものを入れたいです

Constant( "Alert" )に変換されますConstants::c_alert;

4

1 に答える 1

0

いいえ、回避策はありません。プリプロセッサ パスは 1 つだけです。

コメントで述べたように、C++ テンプレートははるかに簡単です。それらは、はるかに複雑な文法をサポートし、数学を実行でき、255 レベルのネストを実行できる実際のコンパイラによってコンパイルされます。

于 2016-06-29T12:18:14.783 に答える