我创建了一个容器来控制某些类型对象的生命周期(新建/删除)以避免任何编程错误。例如,一个对象在没有任何通知容器的情况下被删除。这些对象继承自同一个基类 (GreetingBase)。
对于实现,我使用了“模板技巧”:
class GreetingBase{
public:
virtual void sayHello(){
std::cout << "Hello there!" << endl;
}
virtual ~GreetingBase(){}
};
class GreetingDerived: public GreetingBase{
public:
virtual void sayHello(){
std::cout << "Hola amigos!" << endl;
}
virtual ~GreetingDerived(){}
};
class GreetingContainer{
public:
template <class T>
void addClass(){
items.push_back(new T());
}
~GreetingContainer(){
for(std::vector<GreetingBase*>::iterator it = items.begin();
it < items.end(); it++ ){
delete *it;
}
}
void talk(){
for(std::vector<GreetingBase*>::iterator it = items.begin();
it < items.end(); it++ ){
(*it)->sayHello();
}
}
private:
std::vector<GreetingBase*> items;
};
int main(){
GreetingContainer container;
container.addClass<GreetingDerived>();
container.talk();
return 0;
}
问题:
- 使用模板来解决这个问题是一种常见的方法吗?有什么缺点吗?
- 当“T”不是从“GreetingBase”派生时报告更好的错误消息的任何“标准方式”
先感谢您。