使用不支持的类方法时抛出编译器错误

时间:2016-05-27 13:06:37

标签: c++ oop inheritance

我这里有一个实际问题。我需要扩展我们的数据表类。主类是抽象接口:

class TableInterface {
    abstract void something( some arguments ) = 0;
    abstract void something_2( some arguments ) = 0;
    // many more follow ...
      ...
    abstract int MyNewMethod() = 0;
}

这些类大约有6个实现。我只需要在一个实现中,这可能不会改变一段时间。新方法在所有子类中都有意义,可以实现。我现在剩下这个选项了:

  • 实际上为所有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);}
    

问题在于,除了我的选项之外,所有其他的可能会给其他开发人员带来问题,其他开发人员可能会编译代码而不知道方法体是否未实现。

当类方法使用时,我可以让编译器引发错误吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试以下方式:

class TableInterface 
{
public:
    ...
    virtual int MyNewMethod()
    {
#ifndef MYNEWMETHOD_ALLOWED
        static_assert(false, "MyNewMethod not implemented");
#endif
        ...
    }
    ...
};

然后,在编译自己的代码时,您将包含-DMYNEWMETHOD_ALLOWED define开关。其他人编译自己的工作,不知道这个定义,会得到编译错误。