繁体   English   中英

调用仅在 base 中实现但未派生的 function 时如何警告(或错误)?

[英]How to warn (or error) when calling a function that is only implemented in base but not derived?

我真的不确定如何简要地给这个问题命名。

情况:

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

要求:

  1. derived调用一个未实现的function时,应该会出现一些编译警告或错误。
  2. 随着特征和派生数量的增加,我希望在发生这种情况时我不需要改变(或添加)太多。
  3. 派生类也应该能够转换为基类 class。
  4. 不需要为2..中提到的那些“相同功能”做太多。

也许解决方案(不完美):

  1. 实现Base中的每个功能并在内部抛出错误。 Derived中使用using并将 function 放在私有字段中。 缺点。 如果有新功能,我们需要将其添加到每个 class。如果我们忘记这样做,则没有警告。

  2. Base中使用纯虚函数,并在每个Derived中为每个特性实现它们。 缺点: Derived不需要的那些功能的许多实现(和代码),并且实现都是相同的 - 抛出错误。

更新:

对于 11.:通过“很多实现”,我做了一个例子: https://godbolt.org/z/sW8eKjbhx

您可以将此 function 标记为纯虚拟。 然后它必须在派生类中被覆盖。 它仍然可以有身体。

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

void Base::f() {
    // ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM