如何实现从模板参数返回向量的模板函数?

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&lt;int&gt; 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 个给定的指针/迭代器(aa+n)并使用它。

以上是关于如何实现从模板参数返回向量的模板函数?的主要内容,如果未能解决你的问题,请参考以下文章

从模板生成排列

c++模板如何学好啊?愁,看不懂,求指导

C++从青铜到王者第六篇:C++模板初阶

如何将右值引用参数传递给 C++ 中的模板 operator() 函数?

如何将 url 参数传递给视图以供其他类函数和模板使用

如何使用 C++11 可变参数模板来定义由向量元组支持的元组向量?