如何在C ++ 11的构造函数初始化列表中使用一个公共参数初始化元组的元素?

矩阵安德鲁

我实际上正在尝试在构造时提供对元组元素的引用。

答案中,构造函数中有一个参数包扩展,为每个tuple元素提供相同的参数。我曾尝试以类似的方式进行操作,但遇到的错误与尝试在默认构造函数本身中构造元组时遇到的错误相同,即:

没有匹配的函数调用 'std::tuple<T1,T2, ..>::tuple(Base&, Base&,..)'

class Base
{
public:
    Base() :
        Base(*this, *this, *this, *this, // delegating to templated constructor
               *this, *this, *this) 
    {}

    template<typename... T>
    Base(T&&... args) :
        tuple(args...) // error
    {}

private:
    std::tuple<T1, T2, etc..>; // size of 7
};

使用std :: make_tuple(带有reference_wrappers)提供参数也给出了错误,我认为它需要c ++ 14。我正在使用minGW 4.9.2。

编辑:元素类型将Base&作为其构造函数的参数,例如T(Base&)

class Base
{
// ... 
private:
   std::tuple<T1, T2, T3.. etc> tuple; // all types have this constructor:
                                       // T(Base&);
};

编辑:应该检查所有错误消息;)

C:\..\mingw492_32\i686-w64-mingw32\include\c++\tuple:418: error: no type named 'type' in 'struct std::enable_if<false, void>'
       template<typename... _UElements, typename = typename
                                    ^

这使我想起,也许我所T(Base&)声明的类型之一被错误地声明了。b

矩阵安德鲁

问题已解决。甚至构造函数初始化器列表中的琐碎构造也可以像您期望的那样工作:

Base() :
    tuple{*this, *this, *this, *this,
          *this, *this, *this}
{}

其中一种类型的构造函数声明错误,起初我没有从这两条错误消息中推断出这一点。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何创建一个用列表初始化的构造函数?

来自分类Dev

如何创建一个用列表初始化的构造函数?

来自分类Dev

C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

来自分类Dev

为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

来自分类Dev

如何在类构造函数中使用参数初始化std :: array的大小?

来自分类Dev

如何在初始化块中使用构造函数参数

来自分类Dev

如何在C ++中使用构造函数初始化2D向量?

来自分类Dev

如何在C ++中使用构造函数初始化2D向量?

来自分类Dev

空的C ++ 11初始化程序列表导致容器中包含一个默认的构造对象

来自分类Dev

空的C ++ 11初始化程序列表导致容器中包含一个默认的构造对象

来自分类Dev

为什么就地成员初始化在C ++ 11中使用副本构造函数?

来自分类Dev

C ++使用其他参数获取构造函数的初始化程序列表

来自分类Dev

C ++使用其他参数获取构造函数的初始化程序列表

来自分类Dev

使用初始化列表时检查传递给构造函数的参数-C ++

来自分类Dev

如何初始化一个懒惰列表?

来自分类Dev

如何初始化一个懒惰列表?

来自分类Dev

如何在Objective C的参数化构造函数中初始化NSDate?

来自分类Dev

如何在构造函数的成员初始化器列表中调用两个函数?

来自分类Dev

使用另一个元素和额外元素的内容初始化C ++(11)std :: vector

来自分类Dev

如何在C ++中使用构造函数(只是构造函数)在类中初始化大型私有数组?

来自分类Dev

如何在Swift中使用元组数组参数调用类初始化?

来自分类Dev

如何在Rust的初始化列表中通过另一个值初始化值?

来自分类Dev

如何在 C# 中使用来自另一个类的初始化实例对象?

来自分类Dev

C ++构造函数:在初始化列表之前初始化局部变量

来自分类Dev

C ++ 11在constexpr函数中使用统一值初始化数组

来自分类Dev

C ++ 11在constexpr函数中使用统一值初始化数组

来自分类Dev

来自另一个具有数组初始化功能的构造函数的C ++构造函数调用

来自分类Dev

如何在Swift中使用初始化程序或构造函数

Related 相关文章

  1. 1

    如何创建一个用列表初始化的构造函数?

  2. 2

    如何创建一个用列表初始化的构造函数?

  3. 3

    C ++中的初始化程序列表和类初始化。我有无参数构造函数,但仍必须使用初始化列表?

  4. 4

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

  5. 5

    为什么显式声明的构造函数阻止使用C ++ 11初始化列表进行成员初始化?

  6. 6

    如何在类构造函数中使用参数初始化std :: array的大小?

  7. 7

    如何在初始化块中使用构造函数参数

  8. 8

    如何在C ++中使用构造函数初始化2D向量?

  9. 9

    如何在C ++中使用构造函数初始化2D向量?

  10. 10

    空的C ++ 11初始化程序列表导致容器中包含一个默认的构造对象

  11. 11

    空的C ++ 11初始化程序列表导致容器中包含一个默认的构造对象

  12. 12

    为什么就地成员初始化在C ++ 11中使用副本构造函数?

  13. 13

    C ++使用其他参数获取构造函数的初始化程序列表

  14. 14

    C ++使用其他参数获取构造函数的初始化程序列表

  15. 15

    使用初始化列表时检查传递给构造函数的参数-C ++

  16. 16

    如何初始化一个懒惰列表?

  17. 17

    如何初始化一个懒惰列表?

  18. 18

    如何在Objective C的参数化构造函数中初始化NSDate?

  19. 19

    如何在构造函数的成员初始化器列表中调用两个函数?

  20. 20

    使用另一个元素和额外元素的内容初始化C ++(11)std :: vector

  21. 21

    如何在C ++中使用构造函数(只是构造函数)在类中初始化大型私有数组?

  22. 22

    如何在Swift中使用元组数组参数调用类初始化?

  23. 23

    如何在Rust的初始化列表中通过另一个值初始化值?

  24. 24

    如何在 C# 中使用来自另一个类的初始化实例对象?

  25. 25

    C ++构造函数:在初始化列表之前初始化局部变量

  26. 26

    C ++ 11在constexpr函数中使用统一值初始化数组

  27. 27

    C ++ 11在constexpr函数中使用统一值初始化数组

  28. 28

    来自另一个具有数组初始化功能的构造函数的C ++构造函数调用

  29. 29

    如何在Swift中使用初始化程序或构造函数

热门标签

归档