У меня есть три класса объектов:
- класс Foo: есть сетка, и мне нужно получить эту сетку;
- класс Bar: это Foo, но имеет некоторыедругие возможности, которых нет у Foo;
- class Baz: это Foo, но есть еще один совершенно независимый набор возможностей, которых нет ни у Foo, ни у Bar.
Все три класса нужнычтобы у меня был способ дать мне свою сетку, которая, однако, может быть реализована многими способами, из которых мне нужно (на данный момент я не вижу другого пути) использовать как минимум 2 разных, которые являются MeshTypeA и MeshTypeB.
Я хотел бы иметь общий интерфейс для разных реализаций одной и той же концепции (getMesh), однако я не могу использовать auto в виртуальном методе.Мне не хватает средств, чтобы код имел смысл.Я хотел бы иметь:
class Foo
{
public:
virtual ~Foo() = 0;
virtual auto getMesh() const = 0; // doesn't compile
};
class Bar : public Foo
{
public:
virtual ~Bar() = 0;
virtual auto getMesh() const = 0; // doesn't compile
// other virtual methods
};
class ConcreteFooWhichUsesA : public Foo
{
public:
ConcreteFooWhichUsesA();
~ConcreteFooWhichUsesA();
auto getMesh() const override {return mesh_;};
private:
MeshTypeA mesh_;
};
class ConcreteBarWhichUsesB : public Bar
{
public:
ConcreteBarWhichUsesB();
~ConcreteBarWhichUsesB();
auto getMesh() const override {return mesh_;};
// other implementations of virtual methods
private:
MeshTypeB mesh_;
};
MeshTypeA и MeshTypeB не являются эксклюзивными для Foo, Bar или Baz, то есть все три могут иметь оба типа меша.Однако мне действительно все равно, какой MeshType я получу при последующем его использовании.
Нужно ли мне оборачивать MeshTypeA и MeshTypeB в свой собственный MeshType?Это вопрос шаблона MeshType?Я считаю, что есть способ, однако связанные вопросы не помогают, или я не могу сформулировать свой вопрос достаточно осмысленно.
Я также нашел это , где автор используетКласс Builder и decltype, но у меня нет такого класса.Может быть, так и будет?Нужен ли класс MeshLoader в качестве уровня косвенности?