用于 C++ 的 msft 编译器支持显式覆盖(请参阅http://msdn.microsoft.com/en-us/library/ksek8777.aspx)
// could be declared __interface I1, making the public scope and pure virtual implied
// I use the more expressive form here for clarity
class I1
{
public:
virtual void foo() = 0;
};
class I2
{
public:
virtual void foo() = 0;
};
class C : public I1, public I2
{
public:
virtual void I1::foo() { cout << "I1::foo\n"; }
virtual void I2::foo() { cout << "I2::foo\n"; }
};
int main()
{
C c;
static_cast<I1*>(&c)->foo();
static_cast<I2*>(&c)->foo();
cin.get();
}
但是 gcc 不喜欢这样。一个简单的“显式覆盖”在线搜索会产生有关新关键字的信息override
。这不一定与我正在寻找的东西有关。c++11(按规范)是否以其他方式支持此功能,或者至少在 gcc 中以某种方式支持此功能?
注意:可接受的答案可能是一个 hack - 只要它与问题的精神相同,而不是解决不同问题的新设计。