说明: 我有3个对象:
class cars;
template<class T> class types : public cars;
template<class T> exposition{
vector<T*> car_vector;
...};
这是一个学校项目,我必须经常使用upcasts和downcasts。我设法将5种类型的汽车添加到矢量中:
void add(T* toadd) {
int opt;
cout << "\n\t 1) Add cabrio";
cout << "\n\t\t Your option: "; cin >> opt;
switch (opt) {
case 1: {
toadd = new types<cabrio>(name, price);
types<cabrio> *a = dynamic_cast<types<cabrio>*>(toadd);
car_vector.push_back(a);
incr();
break;
}
我已经为演示削减了一些无用的代码。它工作,如果我使用以下代码打印矢量,类型是好的(类型是模板和所有):
void toString() {
for (auto i : v_masini)
{
cout << "\n\t "<< i->get_type(); // returns typeid(*i).name()
cout << "\t "; i->toString();
cout << endl;
}
}
现在,我不得不再进行一次销售和购买课程。它必须包含'supersport'汽车的矢量。下面的实现抛出一个错误,说它不能从汽车转换为const类型&amp;,但是如果我打印(* i)的typeid它说它是一个类型......
vector<types<supersport>> get_ss() {
vector<types<supersport>> to_return;
for (auto i : car_vector)
if (i->get_type() == "class supersport")
{
to_return.push_back(*i);
};
return to_return;
}
提前感谢您的帮助!