C++11/C++14中模板类内识别自身指针类型的语法咨询
在C++11/14中模板类内部识别
myTemplate<T>*的正确姿势 当然可以在模板类声明内部直接使用myTemplate<T>*类型,甚至还有更简洁的写法,下面给你详细拆解:
1. 基础用法:直接使用myTemplate<T>*
在模板类的作用域里,编译器已经明确当前的模板参数T,所以你完全可以直接把myTemplate<T>*作为成员函数的参数类型。不过要注意一个关键细节:如果你的意图是写构造函数,那绝对不能加void返回值——构造函数是没有返回类型的。
给你一个正确的示例:
template <class T> class myTemplate { public: // 构造函数:接收同类型模板类指针和int参数 myTemplate(myTemplate<T>* ptr, int value) { // 这里可以实现你需要的逻辑,比如复用ptr的资源 } // 普通成员函数:同样可以用myTemplate<T>*作为参数 void processPointer(myTemplate<T>* ptr) { // 函数逻辑代码 } };
2. 简化写法:省略模板参数T
在模板类内部,你其实可以不用写myTemplate<T>*,直接写myTemplate*就行——编译器会自动关联当前的模板参数T,这在C++11及之后的标准里都是完全支持的。上面的代码可以简化成这样:
template <class T> class myTemplate { public: myTemplate(myTemplate* ptr, int value) { // 逻辑实现 } void processPointer(myTemplate* ptr) { // 逻辑实现 } };
3. 你代码里的错误需要修正
你写的void myTemplate(myTemplate<T>*, int);有两个问题:
- 如果这是构造函数:构造函数不允许有返回值,必须删掉
void; - 如果这是普通成员函数:不能用类名
myTemplate作为函数名——C++会把类名作为成员函数名的情况解析为构造函数,而构造函数不允许有返回值,所以普通成员函数得换个名字,比如initFromPointer之类的。
内容的提问来源于stack exchange,提问作者user5110759
相关产品推荐
相关产品推荐

