2

オブジェクトのクラスの外部からインスタンスメソッドの特定の定義を静的に呼び出して、その特定の用途でのポリモーフィズムを禁止するにはどうすればよいですか?(言い換えると、Visual Basic.NETと同等のものが必要ですMyClassが、外部からです。)

4

3 に答える 3

3

デリゲートを作成して呼び出すことにより、強制的に呼び出しを行うことができます。メモリから:

void delegate(int, float) dg;

dg = &t.theFunction;  // gives the function for the dynamic type
// OR
dg.ptr = t;  // gives the object

dg.funcptr = &typeof(t).theFunction; // gives the function for the static type 

dg(1,3.1415);

OTOHこれは私の本のハックであり、一部のタイプでは必ず問題が発生します。

于 2011-01-02T01:14:29.357 に答える
1

それがあなたが望む振る舞いではないのに、あなたがポリモーフィッククラスメソッドを使用している理由はありますか?また、クラスの外部で何を意味するのかわかりません(オブジェクトのインスタンスなしでメンバー関数を呼び出したいのですか)?

私はあなたがおそらくすべきことは最初のパラメータとしてオブジェクトをとる通常の関数を書くことであるといくつかの仮定をします。

binarySize(MyClass myObject) {  ... }

Dコンパイラにまだ追加されていない機能は、次のように呼び出す機能です。

myObject.binarySize();
于 2011-01-02T00:55:09.273 に答える
0

typeof(this).myfunc()クラス内インスタンス関数を使用して、非仮想呼び出しを行うことができます。外部クラスから非仮想的に仮想メソッドを呼び出す必要がある場合は、呼び出しをラップする新しい(最終)メソッドをクラスに追加できます。

于 2011-01-01T20:03:00.437 に答える