在C ++中使用对象和模板

时间:2012-07-13 17:12:23

标签: c++ templates

我有一个带模板的课程:

template<class T> class MyClass {
public:
      MyClass() { _genericObj = new T; }
      ~MyClass() { delete _genericObj; }
      void doSomething() { _genericObj.do(); }
private:
      T* _genericObj;
};

另一堂课:

class AnotherClass {
public:
     AnotherClass(MyClass &obj) { this->_obj = obj; }
     ~AnotherClass() {  }
     doMagic() { _obj->doSomething(); }
private
     MyClass* _obj;
}

在AnotherClass中使用没有角括号的MyClass实例(一般性)是否正确? 如果此示例有误,我该如何更正我的代码?非常感谢你。

1 个答案:

答案 0 :(得分:0)

您必须通过为MyClass指定模板参数,或者是否希望AnotherClass也是类模板来决定是否需要具体类型。您还遇到的问题是您在构造函数中传递了某种MyClass的引用,但您正在尝试初始化指向它的指针。修复方法实际上取决于您想要实现的目标,这些示例假设您的AnotherClass将拥有一个动态分配的MyClass<SomeType>类型的对象:

class AnotherClass {
public:
     AnotherClass(MyClass<int> &obj) { this->obj_ = new MyClass<int>(obj); }
     ~AnotherClass() { delete obj_; }
     doMagic() { obj_->doSomething(); }
private
     MyClass<int>* obj_;
}

template <typename T>
class AnotherClass {
public:
     AnotherClass(MyClass<T> &obj) { this->obj_ = new MyClass<T>(obj); }
     ~AnotherClass() {  delete obj_;} 
     doMagic() { obj_->doSomething(); }
private
     MyClass<T>* obj_;
}

请注意,在C ++中,以下划线开头的名称是为实现保留的,因此我更改了_obj的{​​{1}}。