Автоматическая генерация методов на основе родительских чисто виртуальных методов - PullRequest
0 голосов
/ 04 мая 2018

У меня проблема, подобная следующей:

У меня есть библиотека, которая предоставляет интерфейс фабрики: все методы являются виртуальными, кроме метода create (), который возвратит реализацию.

Теперь я хочу обернуть это в своем классе, главным образом, чтобы добавить некоторые методы и выполнить «большее RAII» уничтожение. Мой класс будет иметь указатель на реализацию и перенаправит большинство методов к нему.

К сожалению, это заставляет меня писать каждый чисто виртуальный метод только для пересылки его в дочерний класс. Я перепробовал все трюки сортировки или шаблон + макросы, но (кажется, что) я не могу переопределить родительский метод с помощью шаблонов, я не могу "шаблонировать" имя метода ...

Это наивное рабочее решение, которое у меня есть:

// lib.h

#include <memory>

class C;

class F {
public:
    virtual void foo() = 0;
    virtual int bar(int *) = 0;
    virtual void close() = 0;
    F *create(class C*);
};

// my realm
class I : public F {
public:
    I(C *c) {
        f.reset(F::create(c));
    }

~I() {
        f->close();
    }

    int mybar(int *);
    void foo() override {
        f->foo();
    }
    int bar(int *i) override {
        return f->bar(i);
    }

    private:
    std::unique_ptr<F> f;
};

Я не могу редактировать lib.h, только I класс. Есть ли способ автоматически генерировать методы переопределения, поэтому не нужно

...