重複の可能性:
C++: 仮想メソッドへのアクセス
仮想メソッド テーブルを使用して、クラス内のインデックスによって関数を呼び出そうとしています...次のコードがあるとします。
class Base
{
public:
Base() {}
virtual ~Base() {}
virtual Base* call_func(unsigned int func_number)
{
// Some way to call f_n
}
protected:
virtual Base* f_1() const = 0;
virtual Base* f_2() const = 0;
virtual Base* f_3() const = 0;
};
関数配列、if ステートメント、および case ステートメントを使用してこれを既に実装しています...つまり、ポインターのみを使用してメソッドを呼び出す (たとえば、vtable にアクセスする) などのより良い方法はありますか?
これを解決した後、f_1、f_2、f_3 の異なる実装で派生クラス (たとえば、派生 1 と派生 2) を作成し、次のようなクラス コントロールを作成します。
class Control
{
protected:
Base* current;
public:
Control(Base* curr = new derived1): current(curr) {}
virtual ~Control()
{
delete current;
}
virtual void call_functions(unsigned int func_numb)
{
delete current
Base* new = current->call_func(func_numb);
current = new;
}
};
私のひどい英語で申し訳ありません:S...そして事前に感謝します!