我試圖使用虛擬方法表的索引 類調用函數...假設我們有下面的代碼: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-statement ...所以,有沒有更好的方法來調用方法 只使用指針(例如訪問vtable)或類似的東西?
對不起,我可怕的英語:S ...並提前致謝!編輯: 感謝您的所有建議!我打算擴展我的問題:
解決此問題後,我將創建具有f_1,f_2,f_3的不同實現的派生類(例如derived1和derived 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;
}
};
做你想做「call_func」是虛擬的? – Chubsdad
好問題。我同意,感覺應該有一種方法來使用'func_number'來直接索引我們知道已經存在的指針表(在所有常見的實現中)。可悲的是,我認爲沒有。 「if」或「switch」是唯一的出路,因爲你需要虛擬呼叫。 –
@NicholasWilson:問題在於它只存在於「所有常見實現」中,而不是所有可能的實現中。語言規範並不要求它在那裏,所以沒有可移植的方式來訪問它。 –