使用不受支持的类方法时引发编译器错误

Throw a compiler error when unsupported class method is used

本文关键字:编译器 错误 类方法 支持      更新时间:2023-10-16

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

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);}
    

问题是,除了我的选项一之外,所有其他选项都会给其他开发人员带来问题,他们可能会在没有实现方法体的情况下编译代码。

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

您可以尝试以下方法:

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

然后,在编译自己的代码时,您将包含-DMYNEWMETHOD_ALLOWED定义开关。任何其他编译自己作品的人,如果不知道这个定义,都会出现编译错误。