6

C++ には、vtable を使用しないインターフェイスの適切な実装がありますか?

例えば

class BaseInterface{
public:
virtual void func() const = 0;
}

class BaseInterfaceImpl:public BaseInterface{
public:
void func(){ std::cout<<"called."<<endl; }
}

BaseInterface* obj = new BaseInterfaceImpl();
obj->func();

最後の行の func への呼び出しは、vtable に移動して BaseInterfaceImpl::func の func ptr を見つけますが、BaseInterfaceImpl は純粋なインターフェイス クラス BaseInterface 以外の他のクラスからサブクラス化されていないため、直接それを行う C++ の方法はありますか?

ありがとう。ギル。

4

2 に答える 2

7

はい。モニカCRTPで行きます。ちょっと見てください。

于 2010-04-06T19:13:04.593 に答える
0

どの言語でも、コンパイル時にどの関数を呼び出す必要があるかがわからない限り、動的ディスパッチを行うためにvtableに相当するものに移動する必要があると思います。これは、巧妙なコンパイラの最適化、または CRTP (すでに述べた) などの手法の結果である可能性があります。

于 2010-04-06T19:16:38.820 に答える