我们不能从initializer_list创建std :: array,但是可以使用带有可变参数的辅助函数来创建它吗?

0xbadf00d

请考虑以下vector课程:

template<typename T, class Tuple = std::vector<T>>
class vector
{
public:
    using size_type = typename Tuple::size_type;

    template<class T = Tuple, class = std::enable_if_t<std::is_constructible<T, size_type>::value>>
    vector(size_type n)
        : m_elements(n)
    { }
    template<class T = Tuple, class = std::enable_if_t<std::is_constructible<T, std::initializer_list<T>>::value>>
    vector(std::initializer_list<T> init)
        : m_elements(init)
    { }

private:
    Tuple m_elements;
}; // class vector

template<typename T, std::size_t N>
using static_vector = vector<T, std::array<T, N>>;

template<typename T>
static_vector<T, /* N */> make_static_vector(T... elements) { /* ... */ }

问题是我想std::array用于Tuple,但std::array不能从构造initialiter_list这就是为什么我vector在这种情况下禁用了相应的构造函数的原因(我知道std::copy(init.begin(), init.end(), m_elements.begin()无论哪种情况我都可以使用,但这会产生其他问题。)

因为我想做类似的事情,static_vector<double> x = { 1, 2, 3 };所以我认为最好的选择(随时纠正我)是提供的帮助功能make_static_vector(这不如的漂亮initializer_list,因此,请再次提出一个更漂亮的解决方案。)

我要写auto x = make_static_vector<double>(1, 2, 3);我需要如何实施?

沃恩·卡托

一个简单的形式如下所示:

template <typename T,typename... Elements>
static_vector<T, sizeof...(Elements)>
  make_static_vector(Elements... elements)
{
    return static_vector<T,sizeof...(Elements)>(elements...);
}

您还需要为向量创建一个可变参数的构造函数:

template <typename... Args>
vector(Args... init)
    : m_elements{static_cast<T>(init)...}
{ }

static_cast,如果你想避免使用在需要双打整数缩小错误是必要的。

如果您想使用完美的转发,则需要输入更多内容,但这是相同的想法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我们不能从派生类中调用受保护的析构函数?

来自分类Dev

std :: initializer_list作为构造函数的模板参数

来自分类Dev

我们可以使用参数包作为std :: vector初始化程序吗?

来自分类Dev

我们可以使用django的python来创建应用程序吗?

来自分类Dev

不能使用std :: initializer_list调用new运算符进行列表初始化吗?

来自分类Dev

我们可以使用list.map调用具有多个参数的方法吗?

来自分类Dev

我们可以使用PowerMock创建java.lang.Class的模拟实例吗?

来自分类Dev

std :: initializer_list作为std :: array构造函数

来自分类Dev

我们可以使用动态扩展磁盘在Azure中创建VM吗?

来自分类Dev

我们可以使用比模板中更少的参数来声明类模板吗?

来自分类Dev

我可以在Rust中使用泛型函数参数来创建新变量吗?

来自分类Dev

为什么我不能在`std :: initializer_list`中使用引用类型

来自分类Dev

我们可以使用JQuery或Javascript创建CSS选择器规则吗?

来自分类Dev

我们可以使用Google Apps脚本在Google Spreasheet中创建数据栏吗?

来自分类Dev

我可以使用函数参数来创建全局变量吗?

来自分类Dev

我们可以使用eval函数获取用户创建的列表吗?

来自分类Dev

通过使用带有数字文字的函数来创建临时对象吗?

来自分类Dev

std :: initializer_list可以专用吗?

来自分类Dev

我们可以使用R purrr累积函数来汇总数据集吗?

来自分类Dev

我们可以在python程序中多次使用带有某些参数的用户定义函数吗?

来自分类Dev

我们可以使用lambda创建unique_ptr吗?

来自分类Dev

我们可以使用“文件权限”来编辑/创建文件吗?

来自分类Dev

我们不能从initializer_list创建std :: array,但是我们可以使用带有可变参数的辅助函数来创建它吗?

来自分类Dev

我们可以通过不同的方式来创建类,而不能将其子类化(扩展)?

来自分类Dev

我们可以在方法内部创建IIB(实例初始化块)吗?如果我们不能为什么不给出编译时错误呢?

来自分类Dev

我们可以使用Outlook加载项创建和运行宏吗?

来自分类Dev

Java 8:我们可以使用 map 在流中创建实例方法 ref 吗?

来自分类Dev

我们不能使用 GET 在 REST 中创建新资源而不是 PUT 吗?

来自分类Dev

如何使用 initializer_list 创建 C++ <array> 结构?

Related 相关文章

  1. 1

    为什么我们不能从派生类中调用受保护的析构函数?

  2. 2

    std :: initializer_list作为构造函数的模板参数

  3. 3

    我们可以使用参数包作为std :: vector初始化程序吗?

  4. 4

    我们可以使用django的python来创建应用程序吗?

  5. 5

    不能使用std :: initializer_list调用new运算符进行列表初始化吗?

  6. 6

    我们可以使用list.map调用具有多个参数的方法吗?

  7. 7

    我们可以使用PowerMock创建java.lang.Class的模拟实例吗?

  8. 8

    std :: initializer_list作为std :: array构造函数

  9. 9

    我们可以使用动态扩展磁盘在Azure中创建VM吗?

  10. 10

    我们可以使用比模板中更少的参数来声明类模板吗?

  11. 11

    我可以在Rust中使用泛型函数参数来创建新变量吗?

  12. 12

    为什么我不能在`std :: initializer_list`中使用引用类型

  13. 13

    我们可以使用JQuery或Javascript创建CSS选择器规则吗?

  14. 14

    我们可以使用Google Apps脚本在Google Spreasheet中创建数据栏吗?

  15. 15

    我可以使用函数参数来创建全局变量吗?

  16. 16

    我们可以使用eval函数获取用户创建的列表吗?

  17. 17

    通过使用带有数字文字的函数来创建临时对象吗?

  18. 18

    std :: initializer_list可以专用吗?

  19. 19

    我们可以使用R purrr累积函数来汇总数据集吗?

  20. 20

    我们可以在python程序中多次使用带有某些参数的用户定义函数吗?

  21. 21

    我们可以使用lambda创建unique_ptr吗?

  22. 22

    我们可以使用“文件权限”来编辑/创建文件吗?

  23. 23

    我们不能从initializer_list创建std :: array,但是我们可以使用带有可变参数的辅助函数来创建它吗?

  24. 24

    我们可以通过不同的方式来创建类,而不能将其子类化(扩展)?

  25. 25

    我们可以在方法内部创建IIB(实例初始化块)吗?如果我们不能为什么不给出编译时错误呢?

  26. 26

    我们可以使用Outlook加载项创建和运行宏吗?

  27. 27

    Java 8:我们可以使用 map 在流中创建实例方法 ref 吗?

  28. 28

    我们不能使用 GET 在 REST 中创建新资源而不是 PUT 吗?

  29. 29

    如何使用 initializer_list 创建 C++ <array> 结构?

热门标签

归档