我这里有一个实际问题。我需要扩展我们的数据表类。主类是抽象接口:
class TableInterface {
abstract void something( some arguments ) = 0;
abstract void something_2( some arguments ) = 0;
// many more follow ...
...
abstract int MyNewMethod() = 0;
}
这些类大约有6个实现。我只需要在一个实现中,这可能不会改变一段时间。新方法在所有子类中都有意义,可以实现。我现在剩下这个选项了:
留空方法体。那太讨厌了。
abstract int MyNewMethod() {return -1;}
使用时抛出异常或使用assert
:
abstract int MyNewMethod() {throw std::std::runtime_error("Not implemented!");}
-- or --
abstract int MyNewMethod() {assert("Not implemented yet!" && false);}
问题在于,除了我的选项之外,所有其他的可能会给其他开发人员带来问题,其他开发人员可能会编译代码而不知道方法体是否未实现。
当类方法使用时,我可以让编译器引发错误吗?
答案 0 :(得分:1)
您可以尝试以下方式:
class TableInterface
{
public:
...
virtual int MyNewMethod()
{
#ifndef MYNEWMETHOD_ALLOWED
static_assert(false, "MyNewMethod not implemented");
#endif
...
}
...
};
然后,在编译自己的代码时,您将包含-DMYNEWMETHOD_ALLOWED
define开关。其他人编译自己的工作,不知道这个定义,会得到编译错误。