繁体   English   中英

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

[英]Using object and template in C++

我有一个带有模板的课程:

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实例是否正确(出于普遍性)? 如果此示例是错误的,如何纠正我的代码? 非常感谢你。

您必须通过为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更改为obj_

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM