我有一个虚基类函数,在特定派生类中不应该被使用。有没有一种方法可以“删除”它?我当然可以只给它一个空的定义,但我宁愿让其尝试使用时抛出编译时错误。C++11的delete
指示符似乎是我想要的,但是……
class B
{
virtual void f();
};
class D : public B
{
virtual void f() = delete; //Error
};
编译不通过; 至少在gcc中,明确禁止我删除具有非删除基本版本的函数。还有其他方法可以实现相同的功能吗?
D *d = new D(); static_cast<B *>(d)->f()
中得到编译器错误吗? - Bryan ChenD::f
仍然会被调用,所以是的。 - Matt Phillipsdelete
关键字的使用。delete
关键字不是用来从子类中删除方法的,这会违反继承规则。它应该被用来禁用特定的调用(比如复制调用或特定类型参数的调用)。 - Holt