2
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中支持?
注意:一个可以接受的答案可能是一个破解 - 只要它与问题的精神相同,而不是解决不同问题的新设计。
是可以接受的,伟大的想法。当一个简单的概念被用来解决问题时,我觉得有些尴尬,我想有时候我们会以一定的思维方式让自己的头脑发现,并希望找到一个特定的“类型”答案。对于ref cast vs指针也是+1;我实际上已经有了实际代码中的指针 - 在复制+粘贴后快速修复示例代码。尽管如此,很好的指出我们有这个选择。 (可惜我无法让你两次赞不绝口)。 – payo 2012-04-26 19:30:29
@payo,让我为你做:) – chris 2012-04-26 19:31:40
@chris +1对你我的朋友:)呵呵 – payo 2012-04-26 19:33:51