如何警告(或错误)时,调用一个函数,只实现在基,但不派生?



我真的不知道如何简单地给这个问题起个标题。

:

  1. 在c++中
  2. 有一个Base作为接口,它指定了我们拥有的所有特性(成员函数)。也有多个派生类可以实现功能的子集。这些函数是虚函数。
  3. 还有一些函数在所有派生类中都是相同的。
  4. 允许重载成员函数
  5. 我们可以通过使用SFINAE或概念来静态检查某个函数在某些Derived中是否可用。

要求:

  1. 当使用派生函数调用非实现函数时,应该有一些编译警告或错误。
  2. 由于功能和派生的数量可以增加,我希望当这样的事情发生时我不需要改变(或添加)太多。
  3. 派生类也应该能够转换为基类。
  4. 不需要为那些"相同的功能"做太多。2.

可能的解决方案(不完美):

  1. 实现Base中的每个功能并抛出错误。在Derived中使用using,并将函数放在private字段中。缺点:如果有一个新特性,我们需要把它添加到每个类中。如果我们忘记这样做,没有警告。

  2. Base中使用纯虚函数,并在每个Derived中为每个特性实现它们。缺点:Derived不需要的功能有很多实现(和代码),而且实现都是一样的——抛出错误。

  3. 更新:

为11。:通过"很多实现",我做了一个例子:https://godbolt.org/z/sW8eKjbhx.

可以将此函数标记为纯虚函数。然后必须在派生类中重写它。但它仍然可以有主体

class Base {
public:
virtual void f() = 0;
};
void Base::f() {
// ...
}

最新更新