假設我有兩門課:
class A {
public:
A() {/*...*/}
};
class B {
public:
B() {/*...*/}
};
并存儲類A
的對象的向量:
std::vector<A*> objects;
如何將類B
的對象添加到向量中?我的第一個想法是使用派生類。它是有效的,但類A
中可能有一些函數不會被類B
中的任何對象使用。例如:
class A {
public:
virtual ~A() {};
A() {/*...*/}
void doSomething() {/*...*/}
int returnSomething() {/*...*/}
};
class B : public A {
public:
B() {/*...*/}
void doSomethingDifferent() {/*...*/}
int returnSomethingDifferent() {/*...*/}
};
objects.push_back(objectOfClassB);
有效。但是,當我處理類B
的對象時,我永遠不會使用類A
中聲明的函數(或變量)。
在不使用派生類的情況下,如何將一個類的對象存儲為另一個類?或者,有沒有一種替代的解決方案,完全不這樣做,而是對它的存儲方式做一些不同的事情?
std::variant
將在C++17或更高版本中實現這一功能(請參閱下面的示例),盡管在某些情況下,您可能會發現只聲明單獨的vector<A>
和vector<B>
對象更容易。