我从 Sun C++ 5.10 编译器收到关于我正在更改的某些现有代码中的隐藏虚拟方法的编译警告。无论出于何种原因,作者都没有为给定的数据类型实现函数的覆盖。我在这里重现了这种情况:
// First the data types
struct Shape {};
struct Square : public Shape {};
struct Circle : public Shape {};
struct Triangle : public Shape {};
// Now the visitor classes
struct Virtual
{
virtual ~Virtual() {}
virtual void visit( Square& obj ) {}
virtual void visit( Circle& obj ) {}
virtual void visit( Triangle& obj ) {}
};
struct Concrete : public Virtual
{
void visit( Square& obj ) {}
void visit( Circle& obj ) {}
};
int main()
{
Concrete myConcrete;
return 0;
}
该类Concrete
未实现void visit( Triangle& obj ) {}
,这导致以下错误消息:
"pv_block.cpp", line 20: Warning: Concrete::visit hides the virtual function
Virtual::visit(Triangle&).
该代码工作正常,但删除此警告消息会很好。因此,我想实现该功能,以使编译器满意,但不能使用它 - 最好在编译时检测到 - 因为目前显然没有必要。
有没有办法实现编译断言以允许编译但阻止使用?我无权访问 Boost 或 C++11。