エンジニアリング仕様書の要素と同じ名前の変数が多数あります。そのため、文字列の名前も便利です。引数に展開するC/C++マクロ、文字列としての引数
私自身はこのように多くのマクロを使用して見つける:
#define MACRO(a) a, #a
一般的な使用方法は次のとおりです。
void someFunction(int a, const char *name);
someFunction(MACRO(meaningfully_named_variable));
私の質問は3つあり:
- は、より良い方法はありますこれをする?
- 類似のマクロはBoostや他のライブラリで利用できますか?
- もしそうでなければ、私はそれを明確かつ有用なものにするためにどのように修正して名前を変更できますか?
編集 私は上記の最小限の例であると述べている必要があります。関数には他のパラメータがあり、名前付きエンティティはデータメンバでも、関数自体でも構いません。
私がC++を考えているもう一つの拡張は、マクロの内容を受け取ることができるクラスNamedRef
です。
template <typename T>
struct NamedRef
{
NamedRef(T *t, const char *name) : t(t), name(name) { }
T *t;
const char *name;
};
template <typename T>
NamedRef<T> namedRef(T &t, const char *name)
{
return NamedRef<T>(&t, name);
}
#define WITH_NAME(a) a, #a
// more sophisticated usage example
void otherFunction(double, NamedRef<int>, bool);
otherFunction(0.0, namedRef(object.WITH_NAME(meaningful_member_name)), false);
私がしたいのは、マクロのよりわかりやすい名前を選択することです。 'WITH_NAME()' –
@MarkRansomが提案したことを実行してください。私の答えは「大丈夫です」と言っている長い言葉でした.BoostにはBOOST_STRINGIZE(X)というマクロがあります。 – AusCBloke