Решение:
#include <cstdio>
#include <iostream>
#include <vector>
struct B {
virtual void memberOut(){}
};
template<class type>
struct A : B{
type i;
A(type j):B(){
i = j;
}
void memberOut(){
std::cout << i << std::endl;
}
};
std::vector<B*> ve;
int main(int argc, char** args){
ve.push_back(new A<int>(1));
ve.push_back(new A<int>(2));
ve.push_back(new A<char>('a'));
ve.push_back(new A<char>('b'));
for(unsigned int i = 0; i < ve.size(); i++)
ve[i]->memberOut();
return 0;
}
Примечания:
Либо сохраняйте его как два контейнера, либо выполняйте виртуальные функции.У обоих есть свои применения.
Использование шаблона для переменной просто создает две переменные.
Вы также можете сохранить другой вектор type_index и использовать typeid, чтобы запомнить, какой тип указателя указатель void позже, но это всего лишь замедлитель.версия виртуальных функций.Пример:
std::vector<void*> values
std::vector<std::type_index> types
if(types[i]==typeid(A<int>*))
Примечания:
Старайтесь не выходить за рамки при написании комментариев.
Цель комментариев - получить ответ на вопрос, а не спорить.