我正在尝试组织一个Visual Studio项目,其中将包含我对欧拉项目(Project Euler)的所有解决方案。对于每个问题,我都希望有一个单独的目录(problemX
),其中将包含解决此问题的所有必要文件。该目录还将包含一个名为ProblemX
的文件(X是问题的编号),该文件将成为给定问题的“主”文件。但是,这是我的问题:我想为此文件创建某种“模板”。当我不在solve()
文件中创建ProblemX
函数时,我希望编译器给我一个错误。这是如何实现的?我知道在C ++中确实存在抽象类,并且可以使用抽象方法Problem
创建父类solve()
,然后可以从我的ProblemX
文件中的此类继承。但是,这仅适用于非静态方法。我还希望有一个主文件,从中可以调用solve()
方法,而无需在调用ProblemX
方法之前实例化每个solve()
类。我将如何解决这个问题?我也对其他有关如何组织解决方案的建议持开放态度,但我也想知道该问题的解决方案,因为将来我可能会再次遇到该问题。
Ted Lyngmo的这段代码正是我所需要的:
#include <iostream>
struct IProblem {
virtual bool solve() = 0;
virtual ~IProblem() = default;
};
struct Problem1 : IProblem {
bool solve() override {
return true;
}
};
struct Problem2 : IProblem {
bool solve() override {
return false;
}
};
int main() {
std::cout
<< std::boolalpha
<< Problem1().solve() << '\n'
<< Problem2().solve() << '\n';
}