マクロに渡された名前をmangleして、関数の名前として使用したい。 C++の関数として使用するマクロパラメータ名を変換する
#define foo(name) void name(const string& in) { \\do something }
しかし、私はので、私は機能としてそれを使用するために適切なものに名前を変更する必要があり、このマクロは、この
foo(Bar::do)
のようなパラメータを指定して呼び出す必要があるとします。たとえば、私は以下のように
foo
をマクロを呼んでいます。
これを実装する方法はありますか?私はC++ 11とg ++ 5.xを使用します。
編集:
は私が遭遇した問題は、それが制限なく使用することができること、なぜならマクロの古いバージョンを有するのであるので、今、私はマクロを使用しています私のコードの多くの部分を持っていますfoo(Bar::do)
のようなものですが、これらの名前を使用して関数を生成する必要がありますが、関数名は区別しなければならないので、マクロ入力パラメータを関数名として使用することにしました。
これは一例です:
void Bar::do(some_parameters)
{
FOO(Bar::do);
}
これは、今、私はこのように、この部分の上に2番目のマクロを追加したい、私が前に持っていたコードの一部です:
FOO2(Bar::do)
void Bar::do(some_parameters)
{
FOO(Bar::do);
}
両方の名前は同じでなければなりませんが、FOO2
は入力パラメータに基づいて関数を生成する必要があります。
EDIT2:
私は、問題をより正確に説明するためにここにしてみてください。
#define FOO(name) \
some codes here
しかし、今、私は以下のように拡大することができ、マクロを持っているとします:
私はこのようなものを使用することができます#define FOO2(name) void proper_fcn_name(name)(const string &name){ do the same thing here}
#define FOO(name) proper_fcn_name(name)(#name)
:
私はこのようなマクロを持っていた、前にFOO2(some_name)
void Bar::fcn()
{
FOO(some_name);
}
some_name
の形式がBar::fcn
の場合、proper_fcn_name
は、たとえばBar_fcn
に変更します。 some_name
がBar::fcn
た場合、最終的に私は、このような何かを持っていることを望む:
void Bar_fcn(const stirng& name) { }
void Bar::fcn()
{
Bar_fcn("Bar::fcn");
}
私はBar::fcn
は名前だけですが、私の図書館利用者が前にこのスタイルを使用するので、私はこれを考慮する必要があることに言及しなければなりません。
マクロが実際にやりたいことを理解していない/それが今ではないということを私は理解していません。 – chris
私は 'bar :: do'や' bar do'を 'bar_do'などに変更して、機能として使用できるものを変更したいと思います。それは名前のmangilngのようなものです。 – MohsenTamiz
なぜ 'std :: function'の代わりにマクロを使用していますか? – Tas