【发布时间】:2020-04-29 14:09:39
【问题描述】:
我正在尝试组织一个 Visual Studio 项目,该项目将包含我对 Project Euler 问题 (Project Euler) 的所有解决方案。我希望每个问题都有一个单独的目录 (problemX),其中包含解决此问题所需的所有文件。该目录还将包含一个名为ProblemX 的文件(X 是问题的编号),该文件将是给定问题的“主”文件。然而,这是我的问题:我想为这个文件创建一个“模板”。当我没有在 ProblemX 文件中创建 solve() 函数时,我希望编译器给我一个错误。这是如何实现的?我知道 C++ 中确实存在抽象类,并且我可以使用抽象方法 solve() 创建一个父类 Problem,然后我可以在我的 ProblemX 文件中从这个类继承。但是,这只适用于非静态方法。我还希望有一个主文件,我可以从中调用solve() 方法,而无需在调用solve() 方法之前实例化每个ProblemX 类。我将如何解决这个问题?我也对如何组织我的解决方案持开放态度,但我也想知道这个问题的解决方案,因为我将来可能会再次遇到这个问题。
【问题讨论】:
-
没有静态虚拟方法这样的东西。
virtual的全部要点是根据调用函数的对象的动态类型来选择实现。static的全部意义在于该函数不需要调用对象。 -
对我来说听起来是个坏主意。为什么不为每个问题创建一个可执行文件?
-
感谢您的回答。 @IgorTandetnik 我不明白你对
virtual是什么意思的解释。 -
@JesperJuhl 实际上,我不知道。我以为这太复杂了。但我可能会试一试。谢谢。
-
为什么你更喜欢打电话给
ProblemX::solve();(不能是virtual)而不是ProblemX().solve();(可以是virtual)?示例:godbolt.org/z/mfCqNZ
标签: c++ class inheritance static virtual-functions