У меня проблема, подобная следующей:
У меня есть библиотека, которая предоставляет интерфейс фабрики: все методы являются виртуальными, кроме метода 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 класс. Есть ли способ автоматически генерировать методы переопределения, поэтому не нужно