2016-07-03 8 views
1

ヘッダーファイルを変更するだけで、変更できないC++コードがあります。コードがあり、コンパイルできます。ドットを含むC++マクロ定義?

問題は、私は関数ポインタが定義されていることをこのような何か(関数ポインタは、一種の無関係な私が何をしたいのです)です:私はマクロか何かにしてその変更をしたいと思い

foo.bar(); 

#define foo.bar() FunCall() 

私が理解している問題は、マクロ内でドットを使用することができないということです。それ以外の方法はありますか?

編集:

ビット詳細私が得るコードは、単一のインスタンスを実行することを目的としていますが、クラス内に複数のインスタンスを実行するコードをラップしています。それは私が来ることを試みているいくつかの頭痛を与える。

私は何をしようとしていることは、マクロといくつかのインライン関数または完全な第三の方法を使用するかのいずれかである:

void class::function() 
{ 
    EventFuncTypedef f = foo.bar; 
    (this->*f)(); 
} 

:私はと同等の上に作ることができるいくつかのコードを必要とする

void function() 
{ 
    foo.bar(); 
} 

をまたは

void class::function() 
{ 
    class::FunCall(); 
} 

上記のコードはすべて、原点で実行されるオプション1または2を試すことですアルコード。マクロやヘルパーと

+1

はfuncallの 'で実現される機能'バー() '()'と 'struct'を行い、グローバル変数' foo'を作成します。それで 'foo.bar()'は 'FunCall()'の関数呼び出しになります。大丈夫ですか? – Mine

+2

ドットを取り除くことはできません。あなたは多かれ少なかれ創造的な方法でそれを使うことができます。 –

+0

厳密には不可能ですが、それは実際にそこにあるものです。私が取得するコードは、単一のインスタンスとして実行するために作成され、私は複数のインスタンスのクラスにコード全体をラップしようとしています。それはメンバ関数ポインタでそれを複雑にします。 – ThomasG

答えて

0

struct FunCaller { 
    static auto bar() {FunCall();} 
}; 

#define foo FunCaller{} 
+0

申し訳ありませんが、私はそれがすべてクラスでラップされていたことは言及しませんでした。しかし、これはまだ動作しますか?私は上記の結果を予見することはできませんが、それを試してみたり、同様のことを試してみたりします。 – ThomasG

+0

これは十分に一般化可能であるとは思わないが... –

関連する問題