C++ 是否可以实施';覆盖'-与C++;03

C++ 是否可以实施';覆盖'-与C++;03,c++,polymorphism,overriding,virtual-functions,c++03,C++,Polymorphism,Overriding,Virtual Functions,C++03,在C++11中,我们有override说明符,它允许在编译时验证虚拟函数实际上重写基类中接口的行为 在C++03中是否有同样的行为?检查基类foo中是否存在函数foo,比如说,write sizeof(&Foo::foo); 在foo的子类版本中。其思想是,如果基类Foo::Foo不存在,编译就会失败,如果基类不存在,编译就会产生良性影响 当然,这也有缺点——例如,不能通过重载进行描述。另外,静态函数和具有类似名称的成员变量也将匹配。这也将匹配数据成员和静态成员。我没想过。但它仍然不是

C++11
中,我们有
override
说明符,它允许在编译时验证虚拟函数实际上重写基类中接口的行为


C++03
中是否有同样的行为?

检查基类
foo
中是否存在函数
foo
,比如说,write

sizeof(&Foo::foo);
foo
的子类版本中。其思想是,如果基类
Foo::Foo
不存在,编译就会失败,如果基类不存在,编译就会产生良性影响


当然,这也有缺点——例如,不能通过重载进行描述。另外,
静态
函数和具有类似名称的成员变量也将匹配。

这也将匹配数据成员和静态成员。我没想过。但它仍然不是100%匹配。@Quentin:确实有它的缺点:你指出另一个。你也许可以用模板做一些时髦的事情,但我会担心C++03中的代码膨胀。@Bathsheba嗯,任何优化都会消除这样的NOP,所以(二进制)代码膨胀不应该引起关注。哦,你说的是模板的想法。是的,可能在那里。产生的实例化可能会与调用一起消除,但这不太清楚或确定。由于无处不在的模板头,编译时间将不必要地增加。我认为错误重写的大多数问题是额外/缺少参数(
void Base::f(int)
vs
void-Derived::f(char)
)和不缺少函数。。。