如何在C ++中创建静态纯虚拟方法?

问题描述 投票:0回答:1

我正在尝试组织一个Visual Studio项目,其中将包含我对欧拉项目(Project Euler)的所有解决方案。对于每个问题,我都希望有一个单独的目录(problemX),其中将包含解决此问题的所有必要文件。该目录还将包含一个名为ProblemX的文件(X是问题的编号),该文件将成为给定问题的“主”文件。但是,这是我的问题:我想为此文件创建某种“模板”。当我不在solve()文件中创建ProblemX函数时,我希望编译器给我一个错误。这是如何实现的?我知道在C ++中确实存在抽象类,并且可以使用抽象方法Problem创建父类solve(),然后可以从我的ProblemX文件中的此类继承。但是,这仅适用于非静态方法。我还希望有一个主文件,从中可以调用solve()方法,而无需在调用ProblemX方法之前实例化每个solve()类。我将如何解决这个问题?我也对其他有关如何组织解决方案的建议持开放态度,但我也想知道该问题的解决方案,因为将来我可能会再次遇到该问题。

c++ class inheritance static virtual-functions
1个回答
0
投票

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';
}
© www.soinside.com 2019 - 2024. All rights reserved.