【问题标题】: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 查看编辑:)

标签: c++ c++11


【解决方案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)并使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2010-09-18
  • 1970-01-01
相关资源
最近更新 更多