如何使包装器类将其构造函数参数转发到std :: vector的构造函数?

CodeBricks

我有一个wrapper包装std::vector<int>数据成员的类。我希望wrapper的构造函数将其参数转发给vector<int>的ctor。我试图使用可变参数模板构造函数来实现这一点。由于std::vector<int> v{1, 2, 3}是由其std::initializer_listctor构造的,因此我希望在wrapper执行时激活vectorinitializer_listctor

wrapper mywrap{1, 2, 3}

但是我没有得到理想的结果:

#include <iostream>
#include <vector>

struct wrapper {
    std::vector<int> v;
    template <typename ...Tn> wrapper(Tn ...args) : v(args...) {}
};

int main() {
                                                            //----Output----
    wrapper wrap1{ 1 };
    std::cout << wrap1.v.size() << std::endl;               // 1
    std::cout << wrap1.v.at(0) << std::endl;                // 0
    wrapper wrap2{ 1, 2 };
    std::cout << wrap2.v.size() << std::endl;               // 1
    std::cout << wrap2.v.at(0) << std::endl;                // 2
    wrapper wrap3{ 1, 2, 3 };                               // error
    wrapper wrap4{ std::initializer_list<int>{ 1, 2, 3 } }; // OK
}

输出显示:

wrapper wrap1{ 1 };来电explicit vector (size_type n);

wrapper wrap2{ 1, 2 }; 来电

vector (size_type n, const value_type& val, const allocator_type& alloc = allocator_type());

wrapper wrap3initializer_list<int>未指定时失败

在所有情况下,我都希望激活vectorinitializer_list<int>ctor。如何解决?

永远

通过进行初始化()和通过进行初始化之间的区别{},在构造函数中,您还应该使用{}初始化。

template <typename ...Tn> wrapper(Tn ...args) : v{args...} {}

顺便说一句,如果只想要initializer_listc-tor,为什么不简单地写这个c-tor?

wrapper(std::initializer_list<int> args) : v(args) {}

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用带有 Boost.Python 的 std::map 或 std::vector 参数的构造函数包装 C++ 类?

来自分类Dev

函数作为std :: function包装器的构造函数的参数

来自分类Dev

编译器如何区分std :: vector的构造函数?

来自分类Dev

gsl_vector的构造函数

来自分类Dev

如何通过可变参数模板将多个构造函数参数转发到数组初始化器列表?

来自分类Dev

在类构造函数中设置std :: vector,为元素构造函数设置不同的值

来自分类Dev

在类构造函数中设置std :: vector,为元素构造函数使用不同的值

来自分类Dev

如何在构造函数中使用 <vector>

来自分类Dev

访问在类构造函数中创建的std :: vector

来自分类Dev

Emscripten 类构造函数采用 std::vector<T>

来自分类Dev

使用类std :: vector的构造函数在C数组上进行Constexpr包装

来自分类Dev

使用类std :: vector的构造函数在C数组上进行Constexpr包装

来自分类Dev

std :: vector构造函数,带有一对迭代器

来自分类Dev

在std :: vector构造函数中使用'{}'作为结束迭代器

来自分类Dev

C++11 std::vector 的模板类,构造函数中有参数

来自分类Dev

创建没有复制构造函数的std :: vectors的std :: vector

来自分类Dev

继承构造函数与转发

来自分类Dev

为什么std :: vector的构造函数调用自定义类的析构函数?

来自分类Dev

如何从类构造函数传递模板参数

来自分类Dev

std :: vector元素的初始化移动/复制构造函数

来自分类Dev

为什么std :: vector的元素需要移动构造函数?

来自分类Dev

MSVC 2015为std :: vector选择了错误的构造函数重载

来自分类Dev

通过朋友将构造函数添加到std :: vector

来自分类Dev

std :: vector是否具有引用的副本构造函数?

来自分类Dev

通过朋友将构造函数添加到std :: vector

来自分类Dev

为什么std :: vector的元素需要移动构造函数?

来自分类Dev

std :: vector是否具有{元素的初始数量}构造函数?

来自分类Dev

构造函数中的 std::vector 和 pair 似乎是“空的”

来自分类Dev

注入类的构造函数参数

Related 相关文章

  1. 1

    如何使用带有 Boost.Python 的 std::map 或 std::vector 参数的构造函数包装 C++ 类?

  2. 2

    函数作为std :: function包装器的构造函数的参数

  3. 3

    编译器如何区分std :: vector的构造函数?

  4. 4

    gsl_vector的构造函数

  5. 5

    如何通过可变参数模板将多个构造函数参数转发到数组初始化器列表?

  6. 6

    在类构造函数中设置std :: vector,为元素构造函数设置不同的值

  7. 7

    在类构造函数中设置std :: vector,为元素构造函数使用不同的值

  8. 8

    如何在构造函数中使用 <vector>

  9. 9

    访问在类构造函数中创建的std :: vector

  10. 10

    Emscripten 类构造函数采用 std::vector<T>

  11. 11

    使用类std :: vector的构造函数在C数组上进行Constexpr包装

  12. 12

    使用类std :: vector的构造函数在C数组上进行Constexpr包装

  13. 13

    std :: vector构造函数,带有一对迭代器

  14. 14

    在std :: vector构造函数中使用'{}'作为结束迭代器

  15. 15

    C++11 std::vector 的模板类,构造函数中有参数

  16. 16

    创建没有复制构造函数的std :: vectors的std :: vector

  17. 17

    继承构造函数与转发

  18. 18

    为什么std :: vector的构造函数调用自定义类的析构函数?

  19. 19

    如何从类构造函数传递模板参数

  20. 20

    std :: vector元素的初始化移动/复制构造函数

  21. 21

    为什么std :: vector的元素需要移动构造函数?

  22. 22

    MSVC 2015为std :: vector选择了错误的构造函数重载

  23. 23

    通过朋友将构造函数添加到std :: vector

  24. 24

    std :: vector是否具有引用的副本构造函数?

  25. 25

    通过朋友将构造函数添加到std :: vector

  26. 26

    为什么std :: vector的元素需要移动构造函数?

  27. 27

    std :: vector是否具有{元素的初始数量}构造函数?

  28. 28

    构造函数中的 std::vector 和 pair 似乎是“空的”

  29. 29

    注入类的构造函数参数

热门标签

归档