C++类模板内定义结构体 类内申明后 类外使用结构体为指针返回值的函数
时间: 2023-11-08 22:44:24 浏览: 176
在C++中,可以在类模板内部定义结构体,并在类的外部定义一个函数,该函数返回结构体的指针作为返回值。下面是一个示例:
```cpp
#include <iostream>
template <typename T>
class MyClass {
public:
struct MyStruct {
T data;
};
// 声明结构体指针返回值的函数
MyStruct* createMyStruct();
};
// 在类模板外部定义结构体指针返回值的函数
template <typename T>
typename MyClass<T>::MyStruct* MyClass<T>::createMyStruct() {
MyStruct* myStruct = new MyStruct;
myStruct->data = T();
return myStruct;
}
int main() {
MyClass<int>::MyStruct* myObject = MyClass<int>().createMyStruct();
std::cout << "Data: " << myObject->data << std::endl;
delete myObject;
return 0;
}
```
在上述示例中,`MyClass` 是一个类模板,内部定义了一个名为 `MyStruct` 的结构体。在类模板的外部,我们使用了模板特化,定义了一个返回 `MyClass<T>::MyStruct` 结构体指针的函数 `createMyStruct`。
在 `main` 函数中,我们通过实例化 `MyClass<int>` 来创建一个 `MyClass<int>::MyStruct` 对象,并调用 `createMyStruct` 函数来创建并初始化该结构体对象。然后我们可以通过 `myObject` 访问结构体中的数据成员。
请注意,在使用完结构体指针后,需要使用 `delete` 运算符释放动态分配的内存,以避免内存泄漏。
阅读全文