C ++ форсирует производные классы для реализации функции stati c - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь создать класс Comparator для объектов некоторого класса А. Для этого я хочу создать базовый класс BaseComparator и извлечь из него AComparator и BComparator. Есть ли способ заставить все классы, производные от BaseComparator, реализовать функцию bool compare(const A &a, const A &b), поэтому

class AComparator : public BaseComparator {
    static bool compare(const A &a, const A &b) { return true; }
}

скомпилируется и

class BComparator : public BaseComparator {
}

сгенерирует ошибку во время компиляции?

Есть способ достичь этого с помощью абстрактного класса, который меня не удовлетворяет, так как требует, чтобы у класса была чисто виртуальная функция (в то время как у моих классов нет состояния, а есть только состояния c). и мне их экземпляры не нужны).

1 Ответ

2 голосов
/ 23 марта 2020

Вы можете использовать CRTP и проверить пройденный производный класс, который:

  1. Это действительно производный класс. Вы можете static_assert включить std::is_base_of

  2. . Эта функция-член имеет функцию stati c. Вы можете попытаться получить доступ к квалифицированному имени и static_cast его к типу указателя функции.

...