私は挑戦的でありながら単純な問題に苦しんでいます。次のようなターゲット関数があるとしましょう
void target_fnc(int arg1, double arg2)
{ /* do something here */ }
そして、「抽出」したいのは変数名です(つまり、「arg1」、「arg2」)。たとえば、いくつかの前処理で変数のこの情報を取得するのは簡単です
#define PRINTER(name) printer(#name)
void printer(const std::string& name) {cout << name << endl;}
複数の変数がある場合は、可変個引数マクロを使用することもできます
#define PRINTER2(names...) printer(#names)
printer(arg1,arg2)
しかし、ターゲット関数から「抽出」する方法の手がかりがありません..たとえば、次のように可変個引数テンプレート手法を使用します
template <typename ...A>
void extract(void (*)(A...))
{ printer(A...); }
うまくいきません:もちろん、アンパックされた変数ではなく、「A...」を取得します...何かヒントはありますか?
ありがとう!注: C++11、gcc 4.8.1 を使用しています