我正在尝试使用虚拟方法表通过类中的索引调用函数......假设我们有以下代码:
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-statement 和 case-statement 实现了这一点……那么,有没有更好的方法来仅使用指针(例如访问 vtable)或类似的东西来调用方法?
对不起我糟糕的英语:S ...并提前感谢!
编辑:感谢所有建议!我将扩展我的问题:
解决此问题后,我将使用 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 do_something(unsigned int func_numb)
{
delete current
Base* new = current->next_state(stl);
current = new;
}
};