下面的示例方法旨在檢測它是否在派生類中被重寫。我從MSVC中得到的錯誤暗示着試圖讓函數指針指向一個「綁定」成員是完全錯誤的,但我沒有看到爲什麼這會成爲一個問題的合乎邏輯的原因(畢竟,它將在this-> vtable)。有沒有修復此代碼的非哈希方式?C++基類如何在運行時確定方法是否已被覆蓋?
class MyClass
{
public:
typedef void (MyClass::*MethodPtr)();
virtual void Method()
{
MethodPtr a = &MyClass::Method; // legal
MethodPtr b = &Method; // <<< error C2276: ‘&’ : illegal operation on bound member function expression
if (a == b) // this method has not been overridden?
throw 「Not overridden」;
}
};
不幸的是,在基類和可能實現新方法或舊方法的類之間有許多中間類。我希望用這種方式來儘可能少地改變代碼,但現在看起來不太可能。 – intepid 2009-11-26 07:49:16