最も近い方法は、クラス階層を設計して、C スタイルの vtable が実装するものを正確にモデル化することです。
異なる数の要素を持つ関数ポインター (vtable) の 2 つの配列は、2 つの別個のクラスをモデル化しています。これは明らかですが、配列のサイズが同じであっても、null 以外の要素の数が異なる vtable も別々のクラスをモデル化することも明らかです。
たとえば、vtable と、それを次のように集約する 2 つのオブジェクトがあるとします。
VTABLE OBJECT A OBJECT B
STRUCTURE
+-------------+ +-------------+ +-------------+
| pfnCreate | | 0x..... | | 0x..... |
+-------------+ +-------------+ +-------------+
| pfnUpdate | | 0x..... | | NULL |
+-------------+ +-------------+ +-------------+
| pfnDelete | | 0x..... | | 0x..... |
+-------------+ +-------------+ +-------------+
2 つのオブジェクトは (少なくともクラスの C++ 定義を使用して) 同じクラスではないため、1 つのクラスだけを使用して状況をモデル化できないことは驚くべきことではありません。C++ に変換すると、次のようになります。
class Something {
public:
void Create();
void Delete();
};
class UpdatableSomething : public Something {
public:
void Update();
}
ここで、B は aSomething
であり、A はUpdatableSomething
です。