C ++で、パラメータとして渡された変数の名前を文字列として取得することは可能ですか?

Nov 29 2020

こんなことができるようになりたいです

int myVar = 3;

void logger(int param) {
  std::cout << nameOf(param) << ": " << param << std::endl;
}

logger(myVar); // prints "myVar: 3"

回答

4 cigien Nov 29 2020 at 19:14

いいえ、これを行うためのリフレクション機能がないため、C ++言語ではまだこれを行うことはできません。

ただし、プリプロセッサマクロを使用して、必要な効果を実現できます。マクロは危険であり、可能な限り避ける必要があることに注意してください。

まず、次のように、パラメーター値とパラメーター名を受け取る実装関数を記述します。

void logger_impl(int param, std::string param_name) {
  std::cout << param_name << ": " << param << std::endl;
}

次に、(文字列化#演算子)を使用して、呼び出しサイトの変数名から文字列を生成し、実装関数の呼び出しでその文字列を使用するマクロを記述できます。

#define logger(p) logger_impl(p, #p)

これがデモです。