問題タブ [x-macros]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - プリプロセッサ マクロに追加できますか?
標準 C (または GNU 拡張) でマクロ定義に何かを追加する方法はありますか? たとえば、次のように定義されたマクロが与えられた場合、定義したかのように展開されるように
#define List foo bar
追加できますか?bas
List
#define List foo bar bas
私はこのようなことができることを望んでいました:
しかし、マクロを定義する方法がExpand()
わからないので、必要なことを実行します。
動機: 私は、これらの線に沿って、差別された/タグ付けされた組合と遊んでいます:
これは、X マクロに適した場所だと思います。マクロを定義すると
#define quux_table X(foo) X(bar) X(bas)
、列挙と構造を次のように定義でき、同期が外れることはありません。
もちろん、quux_*
構造が同期しなくなる可能性があるため、合法的にのみ、次のようなことをしたいと思います。
(まあ、私が本当にできるようにしたいのは次のような
member_struct(quux, foo) { int x; };
ことですが、マクロはマクロ内から (再) 定義できないことをよく知っています。)
とにかく、それは私の動機付けの例です。これを達成する方法はありますか?
Boost.Preprocessor の例は、そのライブラリで X マクロ手法を機能させる方法を教えていただければ問題ありません。
boost-preprocessor - Boost.Preprocessorを備えたXマクロ?
これをCPPマクロへの追加に関する私の質問から切り離します:
ここで誰かがBoost.Preprocessorライブラリのデータ型を使用してXマクロのようなものを実装したことがありますか?
c - Xマクロの実際の使用
X-Macrosについて知りました。Xマクロの実際の使用法はどのようなものですか。彼らはいつ仕事に適したツールですか?
c++ - C++ (または x-treme x-macros) でのコードの繰り返しの削減
ゲームBitfighterの Lua インターフェイスを実装しながら、繰り返しとコードの重複を減らすために x-macros を使用しています。次のコードは正常に動作します。
ここまでは順調ですね。
私が何十ものクラスで本質的に同じことをすることを除いて。私が本当にやりたいことは、各クラスでメソッドテーブルを定義し(これは何でも呼び出すことができます)、次に次のように呼び出すことができる2つのマクロを定義することです:
上記のブロック A と B で繰り返されるコードをすべて回避するためです。明らかな方法は、ネストされたマクロを使用することですが、残念ながら、これは違法です。
より良い方法はありますか?
解決
この質問を投稿したとき、答えは「できない」と確信していました。代わりに、2 つのアプローチがありましたが、そのうちの 1 つはまさに私が探していたものでした。また、マクロの落とし穴 (多数あります) についても良い議論があり、いくつかの代替アプローチが提案されました。受け入れられた回答に基づいて私が開発した実装は、クリーンで理解しやすく、汚れたマクロが見えない便利な場所にあります。
どこかの隠れ家で:
各クラス ファイルで:
c++ - #x-マクロ内に含める
コードを生成する x マクロを作成したいと考えています。コードはいくつかのヘッダーに依存しており、名前空間内で生成されることを意図しています。
問題は、xmacro のインクルードが呼び出し元の名前空間内に含まれていることです。これを修正する方法はありますか?
例:
xmacro.hpp:
main.hpp:
c - この X-Macro を変更して、配列を含む構造体を構築することは可能ですか? どのように?
SO に関する非常に役立つ Q/A を見つけました: Is there any way to loop through a struct with elements of different types in C?
しかし、私は X-Macro 全体にまったく慣れていないので、この例を配列を持つ構造体に適応させることができるかどうか、またどのように適応できるか疑問に思っていました-次のように:
これは適応するものです:
私の出発点は次のようなものでしたが、フォーマットは別のものにするか、置き換える必要があると確信しています。
アドレスは {0x10,0x12,0x0A} のようなもので、すべて同じサイズです。
編集:
これは、x-マクロなしで、現在この構造体をどのように使用しているかの例です。
c - それらを使用するためのサンプルコードでXマクロについて説明できる人はいますか?
X-マクロのトピックを詳細に理解しようとしています。しかし、これについて完全な明確さは得られませんでした。どなたか専門家の方が「使い方、呼び出し方」を例に挙げて説明してくださると助かります。
いくつかの記事を見つけましたが、これについて完全に明確にすることはできませんでした。すべての場所で、それらの X マクロの使用が不足しているコードを使用しています。
よろしくお願いします
c++ - C++ マクロの関数型プログラミング スタイル: これはどこかに文書化されていますか?
いくつかの C++ コードを読んで、大まかに次のように関数マクロの「機能的」使用法と呼ぶものに出くわしました (これは、要点を明確にするために完全に様式化された例です)。
私はこの言語に比較的慣れていないため、最初はこれを理解できませんでしたが、プリプロセッサ ( g++ -E
) だけを実行したところ、次のように解決されました。
そこで何をしたか分かりますか?マクロ TOP_LEVELへの関数ポインターのように、マクロ NEXT_LEVEL を渡しました。これがどれほど役立つ可能性があるかを見て、私はそれについてもっと学びたいと思いました.
しかし、大量のグーグル検索にもかかわらず、ドキュメントに近づくものは言うまでもなく、プリプロセッサのこの機能が存在するという証拠 さえ見つけることができません。最後には「高度なマクロのトリック」と呼ばれるセクションさえあります-確かにこれは資格があります!?
(これは、別の評価された関数マクロを引数として単純に関数マクロを呼び出すのとはまったく異なることに注意してください。 FOO(BAR(2)) の方がはるかに簡単です。)
私の質問は次のとおりです。
- この動作の実際の名前はありますか?
- それはどこかに文書化されていますか?
- それは一般的に使用されていますか、それともよく知られている落とし穴などはありますか?