如何实现从模板参数返回向量的模板函数?
Posted
技术标签:
【中文标题】如何实现从模板参数返回向量的模板函数?【英文标题】:How to implement a template function returning a vector from the template argument? 【发布时间】:2015-05-05 09:37:27 【问题描述】:有没有办法(在 C++ 11 中)实现以下方法:
template <typename T>
std::vector<T> makeTypedVector(void* array, int n)
//construct an std::vector of type T from the given array
我会分享我尝试过的方法,但我不知道如何实现它:)
编辑:
数组是否可以使用相同的方法而不是 std::vector?
编辑2:
用法: 我们正在存储 (void* array,Type) 的元组。我需要能够比较相同数据类型的两个元素。因此,我想将 void* 数组转换为类型化向量,以便了解如何在两个元素之间进行比较
【问题讨论】:
为什么不能使用初始化列表,例如vector<int> v = 1, 4,
?编辑:你能展示一些示例用途吗?想象一下有人为你编写了完美的 makeTypedVector() 函数;你会用它做什么?
@DavidSeiler 查看编辑:)
【参考方案1】:
您可以执行以下操作来创建作为给定数组副本的向量:
template <typename T>
std::vector<T> makeTypedVector(void* array, int n)
const T* a = reinterpret_cast<T*>(array);
return a, a + n;
但你先得到void*
似乎很奇怪。
【讨论】:
谢谢。有没有办法为向量使用相同的缓冲区而不是复制它? @Shmoopy:std::vector
不是为此指定的。您可以创建一个类 Range
,它采用 2 个给定的指针/迭代器(a
、a+n
)并使用它。以上是关于如何实现从模板参数返回向量的模板函数?的主要内容,如果未能解决你的问题,请参考以下文章