【问题标题】:Create C-style array form parameter pack创建C风格的数组形式参数包
【发布时间】:2021-08-27 12:39:50
【问题描述】:

如何从参数包创建数组?

    template<typename T, typename... Tpack>
    void covert(Tpack ...pack){
        T *arr = new T[???]; //TODO: how to get Tpack size?
        // TODO: how to fill array?
    }

【问题讨论】:

  • sizeof...(Tpack)?
  • 如何用什么填充数组?您创建了一个 T 数组,但 pack 可以有各种不同的类型。
  • Tpack 应该是一组类型,还是真的应该是模板参数列表中的T... Tpack
  • 这听起来像是一个 XY 问题:您实际上想要实现什么?也许有更好的方法来解决它......
  • 您可以使用sizeof...(pack) 来获取包中元素的数量,但我会完全忘记数组,只使用std::vector&lt;T&gt; arr{pack...};

标签: c++ arrays parameter-pack


【解决方案1】:

你可以这样做:

template<typename T, typename... Tpack>
void covert(Tpack ...pack){
    T *arr = new T[sizeof...(Tpack)]{pack...};
    // ...
    delete[] arr;
}

Demo

但你的功能很奇怪。 std::tuple 可能更合适,或者将输入参数更改为std::initializer_list&lt;T&gt;std::array&lt;T, N&gt;

【讨论】:

  • 先生。快速回答人......甚至不清楚OP想要实现什么......我的意思是,为什么不做类似int t[] = { 1, 2, 3, 4, 5 };
  • 我想这样调用函数:convert (1, 2, 3, 4, 5)
  • @JHBonarius:我们要求 MCVE,OP 提供它,问题是可以回答的。我同意,这种减少可能会使这个例子的意义很差。所以现在我们可以推测 OP 真正想要什么。
猜你喜欢
  • 2013-06-07
  • 2013-12-13
  • 2018-08-25
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多