我有一个带模板的课程:
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实例(一般性)是否正确? 如果此示例有误,我该如何更正我的代码?非常感谢你。
答案 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}}。