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;