gpt4 book ai didi

c++ - 返回 PVOID 的模板函数

转载 作者:行者123 更新时间:2023-11-30 05:32:18 25 4
gpt4 key购买 nike

不确定是否可以这样做。我在下面有一个示例函数需要返回模板

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com