Как создать stati c чисто виртуальные методы в C ++? - PullRequest
0 голосов
/ 12 января 2020

Я пытаюсь организовать один проект Visual Studio, который будет содержать все мои решения проблем Project Euler ( Project Euler ). Я хочу иметь для каждой проблемы отдельный каталог (problemX), который будет содержать все необходимые файлы для решения этой проблемы. В каталог также будет включен один файл с именем ProblemX (X - номер проблемы), и этот файл будет «основным» файлом данной проблемы. Однако это моя проблема: я хочу создать своего рода «шаблон» для этого файла. Я хочу, чтобы компилятор выдавал ошибку, когда я не создаю solve() функцию внутри файла ProblemX. Как это достижимо? Я знаю, что в C ++ существуют абстрактные классы, и я мог бы создать родительский класс Problem с помощью абстрактного метода solve(), а затем я мог бы наследовать этот класс в моих ProblemX файлах. Однако это работает только для нестатических c методов. Я также хочу иметь основной файл, из которого я мог бы вызывать метод solve() без создания экземпляров каждого класса ProblemX перед вызовом метода solve(). Как бы я go о решении этого? Я также открыт для других предложений о том, как мне организовать свои решения, но я также хотел бы знать решение этой проблемы, поскольку я могу столкнуться с этой проблемой в будущем.

1 Ответ

0 голосов
/ 13 января 2020

Этот код Теда Люнгмо именно то, что мне нужно:

#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';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...