AK
Size: a a a
AK
E
class Data {
};
class AData : public Data {
public:
  A getData() const { return a; }
private:
  A a;
};
class BData : public Data {
public:
  B getData() const { return b; }
private:
  B b;
};
class Node {
public:
  void someMethod() {
    //хочу получить a или b из nodeData, как это сделать?
  }
private:
  vector<shared_ptr<Data>> nodeData; //может хранится AData или BData
};PK
std::variant<A, B> — чтобы это лежало в Data сразуPK
AData и BData только эти публичные аксессоры используются? зачем тогда эти классы, инвариант у них какой?RN
class Data {
};
class AData : public Data {
public:
  A getData() const { return a; }
private:
  A a;
};
class BData : public Data {
public:
  B getData() const { return b; }
private:
  B b;
};
class Node {
public:
  void someMethod() {
    //хочу получить a или b из nodeData, как это сделать?
  }
private:
  vector<shared_ptr<Data>> nodeData; //может хранится AData или BData
};RN
E
std::variant<A, B> — чтобы это лежало в Data сразуPK
SH
E
PK
RN
IZ
E
IZ
std::variant<A, B> — чтобы это лежало в Data сразуIZ
PK
animal->getSound() не хватает, слишком общоRN
RN
E
virtual void getData(?& data) const = 0;