不确定是否可以这样做。 我在下面有一个示例函数需要返回模板
template <class T>
T example(DWORD DW)
{
PVOID buffer;
// my code is here sets the buffer
return static_cast<T>(&buffer);
}
想这样用
int iReturn = example<int>(dwSomeDword);
最佳答案
buffer
的类型是void*
.因此,使用地址运算符:&buffer
给你一个 void**
.和 void**
不能static_cast
进入T
(除非您碰巧实例化了 example<void**>
,但即便如此,返回的指针也会悬空)。
这在句法上是正确的:
return *static_cast<T*>(buffer);
该程序将 void 指针转换为指向 T
的指针然后取消引用它。但是不需要这种诡计。只需创建一个 T
首先,对其进行操作,然后将其返回:
T result;
// my code is here sets the result
return result;
这有很多好处。编译器会为您处理内存别名并正确构造结果。这也使命名返回值优化成为可能,从而允许省略拷贝。
关于c++ - 返回 PVOID 的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35181100/