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

标签 c++ templates

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

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/

相关文章:

c++ - 检查迭代器属于哪个 vector

c++ - 为什么 std::map.find() 在以下情况下不起作用?

c++ - 如何使用 std::bind 做到这一点?

html - Angular 2在组件继承模板中包含组件html

c++ - 基于可变参数函数参数调用类函数会导致错误

c++ - 如何初始化不可访问模板类的静态成员?

c++ - 简单 C++ 代码中的段错误

c++ - 为什么我们两次使用引用运算符?

c++ - 线程本地存储和 iOS

c++ - 模拟模板类的静态构造函数