我已经下面的代码,我想存储Base<A> * a,Base<B> * b
在一个向量中,而不会丢失 typename,所以我想要达到vector<.....> vec; vec.push_back(a); vec.push_back(b);
并呼吁像 这vec[0]->DoJob(3,4); vector[1]->DoJob(3,4,"blablba");
。 我该怎么做?如果有办法实现这一点,我可以完全改变设计。如何在模板类中存储模板类?
/*this code works*/
template<typename T>
class Base{
protected:
virtual ~Base(){}
public:
template<typename ... Args>
void DoJob(Args ... args){
T * t = dynamic_cast<T*>(this);
t->print(args...);
}
};
class A:public Base<A>{
public:
void print(int a, int b){
cout << a << b << endl;
}
};
class B :public Base<B>{
public:
void print(float a, double b, string s){
cout << a << b << s << endl;
}
};
Base<A> * a = new A();
a->DoJob(3, 4);
Base<B> * b = new B();
b->DoJob(3, 4,"blabla");
难道你只是添加矢量? 'std :: vector >' –
Vladp
2014-08-30 09:42:57
nope.i不知道继承类的数量,任何类型都可以推入向量中。 – DRoW 2014-08-30 09:47:20
他们是不相关的类型,你不能把它们放入同一个矢量,而不使用增强变体或类似的东西 – 2014-08-30 10:15:33