Я пытаюсь создать классы, которые следуют шаблону, но пытаюсь избежать использования наследования для решения проблемы.Но есть некоторый общий код, который можно вставить в его собственный класс, который можно использовать повторно.Как это:
class Common {
public:
int foo() {return 1;}
};
class A {
public:
// Expose Common's public methods
int bar() {return 2;}
private:
Common common;
};
class B {
public:
// Expose Common's public methods
int bar() {return 3;}
private:
Common common;
};
template<class... Ts> struct overloaded : Ts... { using Ts::operator()...; };
template<class... Ts> overloaded(Ts...) -> overloaded<Ts...>;
std::variant<A, B> variant = A{};
std::visit(overloaded {
[](A a) { a.foo(); },
[](B b) { b.foo(); },
}, variant);
Есть ли способ достичь того, чего я хочу, без написания этого кода биологической карты?
int A::foo() { return common.foo(); }
int B::foo() { return common.foo(); }