問題タブ [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++ - 可変個引数マクロ展開でコンマがどこに消えますか?
私のプロジェクト用に x マクロ ベースのレジスタ ファイル レイアウト記述システムを作成しています。ほとんどの場合、マクロはテンプレート クラスの階層に展開されます。ただし、次のように、すべてのレジスタの列挙も必要です。
これはうまくいきます。ただし、可変個引数マクロを使用してエイリアシング レジスタも指定します。__VA_ARGS__ の要素間のコンマを削除する簡単な方法がないため (私が知っていることではないので、間違っている場合は訂正してください)、次のように記述します。
さて、書いてみると
RINT マクロのコンマが消えます。
次に、RALIAS_4 マクロを直接使用する場合
私が期待するものを手に入れます:
GCC がいくつかの非標準のカンマ除去ロジックを可変個引数マクロに適用することは知っていますが、-std=c++11 を明示的に指定した場合はそうすべきではありません。さらに、Clang でまったく同じ結果が得られました。それでも、標準 (ドラフト) や GCC のドキュメントでこの動作を説明するものを見つけることができませんでした。
私は何が欠けていますか?
Arch Linux (x86-64) で GCC 6.1.1 と Clang 3.8.1 を試しました。両方のコンパイラがリポジトリからインストールされました。
c++ - C++ を使用して XMacro 構造体をコンソールに出力する
私は構造体とクラスをいじっていて、試してみたかった本当にクールなコーディングを見つけました: x-マクロです。
私のコードは、ヘッダー、x-macro、およびメインの cpp ファイルの 3 つのビットに分割されています。プログラムは完成しておらず、コード カバレッジと磨き上げがまだ残っていますが、x マクロを使用して構造体を構築しようとしており、構造体の内容を画面に出力したいと考えています。
これが私のxマクロです
これが私のヘッダーです(今はかなり不毛です)
これが私main()
のコードです (ここでコードをいくつか切り取りました。要約すると、ここで行ったことは、さまざまなプロパティを持つ Airplane クラスを作成することでした。次に、Airplane のプロパティを継承し、独自のことを行う 3 つの異なるサブクラスを作成しました。私の問題がそこにあると思わない限り、私はクラスを投稿することはまったく避けます.私がすることは、正しく機能していない関数を投稿することです...)
私はこれまでマクロを使ったことがなかったので、今やってみようとしています。しかし、私の理解では、前処理されたコードは次のようになります。
上記のコード出力を取得できない原因は何ですか?
c - XMacro の構造体
XMacro テーブルから構造体に値を代入しようとしています。
構造体のこの値に「オフセット」を割り当てる他の方法はありますか?
c++ - 1 つの #macro フィールドとケースを追加します (switch-case で)
マクロ ( ) を定義ALL_SWITCH
して、別のマクロ ( ) の出現をリストとして認識SINGLE_CASE
し、2 つの異なる場所にコードを挿入する方法は?
出来ますか?
例
次のような構文を持つマクロを作成したい:-
以下は、予想される使用法です。
TopHeader.h :-
Manager.h :-
良い設計とは言えませんが、何か集約MACRO
できるかどうかを検討するための簡単な例です。
この機能は、非常に高速な hashMap のためにインデックスをメンバー自体に格納する
など、究極のパフォーマンスと柔軟性が本当に必要な場合に役立ちます。
読みました :-
- C++ マクロから文字列リストと列挙型リストを作成する
単純すぎます。 - C プリプロセッサ (cpp) を介してリストを生成するにはどうすればよいですか?
SINGLE_CASE
(FUNCTION_TABLE
ソリューション内)にはコードが含まれていますが、私のものには含まれていません。
x-macros
タグが適切かどうかわかりません。
(私はこの分野の知識が限られています。)
私の進歩
slot
同じクラスまたはコードに対して多くをサポートする方法はまだわかりませんALL_SWITCH
。
マクロである種のテーブルを定義し、それを他のマクロに読み取らせることを検討しています。(ありえない?)
c++ - 列挙型を使用して、返される結果のタイプを決定します (マクロを使用したハック)
私はいくつかの方法で互いに関連している多くのタイプのゲームオブジェクトを持っています。
すべての関係は によって実装されMap<K1,K2>
ます。
以下は、すべてのリレーション クエリを容易にするハブ クラスGameRelation
です:-
(単なる例であり、すべての詳細に注意を払う必要はありません)
上記のマクロは次のように展開されます:-
使用方法は次のとおりです(完全なデモ):-
いくつかのテストの後、うまく機能します。誰もが魔法のような結果に満足しています。
しかし、私の意識はそれがハックだと教えてくれます。
また、コンテンツ アシスト (インテリセンスなど) や自動リファクタリングにも少し悪いです。実装を に移動したい場合は、素晴らしいハッキングX-MACRO
も必要です。.cpp
質問:
- エレガントな(ハックの少ない)方法はありますか?それは何ですか?
「いいえ」は有効な答えです。 - X-MACROは、そのような (奇妙な) 機能が必要な場合の (プロフェッショナルな) 方法ですか?