코드를 따라했습니다. 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
nope.i 상속받은 클래스의 수는 알지 못하며 모든 타입을 벡터로 푸시 할 수 있습니다. – DRoW
그들은 관련이없는 유형입니다. 부스트 변종이나 비슷한 것을 사용하지 않고 같은 벡터에 넣을 수 없습니다 –