C ++初始化构造函数初始化器列表中的模板数组

瑞安:

我有一个没有默认构造函数的组件类,而是需要一个对象传递给它。我想有一个模板类,它构建一个堆栈空间,该组件的任意大小的数组。因为它没有,并且实际上不应该具有默认构造函数,所以我遇到了使它起作用的问题。关于模板类的另一个说明是,它只能有一个参数传递给它,并且它必须使用它来初始化数组的所有元素。

我要创建数组的组件的相关部分。

class CSomeComponent : public CComponent {
public:
    CSomeComponent(const IObject* pObject) : CComponent(pObject) {
    }
};

我试图使模板数组的相关部分。

template<size_t _Count>
class CComponentArray {
public:
    CComponentArray(const IObject* pObject) : m_component(...) {
    }

private:
    CSomeComponent m_component[_Count];
};

我不能改变组件没有默认构造函数的事实。我也不能给组件数组模板提供多个参数。这两个约束是为什么我不知道该怎么做的原因,因此希望其他人也可以。谢谢!

鲍洛夫:

使用std::array,然后可以创建一个constexpr函数来初始化并返回该数组:

namespace details
{
template <class T, std::size_t Size, class... Args, std::size_t... I>
constexpr auto make_arr_emplace_impl(std::index_sequence<I...>, Args&&... args)
    -> std::array<T, Size>
{
    return std::array<T, Size> {(I, T{args...})...};
}
}


/* creates an std::array<T, Size> where each element is created by calling `T{args...}`
 * note: args will not be moved
 * forwarding references used for preserving constness and binding to temporaries
*/
template <class T, std::size_t Size, class... Args>
constexpr auto make_arr_emplace(Args&&... args) -> std::array<T, Size>
{
    return details::make_arr_emplace_impl<T, Size>(std::make_index_sequence<Size>{}, args...);
}
template<size_t Count>
class CComponentArray {
public:
    CComponentArray(const IObject* pObject)
        : m_component{make_arr_emplace<CSomeComponent, Count>(pObject)}
    {
    }

private:
    std::array<CSomeComponent, Count> m_component;
};

请注意,以双下划线或一个下划线和一个大写字母开头的标识符(例如您的标识符)_Count保留用于实现。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

数组的C ++构造函数初始化器

来自分类Dev

C ++初始化字段直接与默认构造函数中的初始化列表

来自分类Dev

C ++-在构造函数中初始化指针数组

来自分类Dev

C ++ 11使可变参数构造函数了解初始化列表的初始化列表

来自分类Dev

c ++初始化模板类构造函数

来自分类Dev

如何在 C++ 构造函数初始值设定项列表中初始化非内置类型的数组?

来自分类Dev

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

来自分类Dev

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

来自分类Dev

如果构造函数是初始化的,如何初始化对象的数组?C ++

来自分类Dev

C ++:构造函数按初始化列表的顺序

来自分类Dev

C ++:具有初始化列表的默认构造函数

来自分类Dev

在构造函数中初始化的变量未保持初始化状态(C ++)

来自分类Dev

C++ - 构造函数中的 std::vector 初始化

来自分类Dev

C ++在构造函数中初始化对象(多态)

来自分类Dev

在类构造函数中初始化const向量(C ++)

来自分类Dev

在构造函数 C++ 中初始化结构向量

来自分类Dev

C++ 构造函数中的成员初始化语法

来自分类Dev

C++中构造函数初始化对象的问题

来自分类Dev

在C ++中没有匹配的构造函数来初始化可变参数模板

来自分类Dev

具有复杂分配的C ++构造函数初始化器列表

来自分类Dev

在 c++ 中的构造函数中初始化 c 数组时出错

来自分类Dev

当parens初始化时,构造函数初始化列表中的C ++ 11大括号初始化为什么不起作用?

来自分类Dev

C ++在初始化列表中的基类初始化之前调用函数

来自分类Dev

模板函数中的C ++静态变量初始化

来自分类Dev

C ++:默认在模板函数中初始化整数类型

来自分类Dev

C ++构造函数初始化列表中的C struct副本

来自分类Dev

在C ++中的类构造函数中进行列表初始化

来自分类Dev

如何在 C++ 中的构造函数内初始化二维数组?

来自分类Dev

构造函数中的C ++ 2D数据数组-何时初始化和删除?

Related 相关文章

  1. 1

    数组的C ++构造函数初始化器

  2. 2

    C ++初始化字段直接与默认构造函数中的初始化列表

  3. 3

    C ++-在构造函数中初始化指针数组

  4. 4

    C ++ 11使可变参数构造函数了解初始化列表的初始化列表

  5. 5

    c ++初始化模板类构造函数

  6. 6

    如何在 C++ 构造函数初始值设定项列表中初始化非内置类型的数组?

  7. 7

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

  8. 8

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

  9. 9

    如果构造函数是初始化的,如何初始化对象的数组?C ++

  10. 10

    C ++:构造函数按初始化列表的顺序

  11. 11

    C ++:具有初始化列表的默认构造函数

  12. 12

    在构造函数中初始化的变量未保持初始化状态(C ++)

  13. 13

    C++ - 构造函数中的 std::vector 初始化

  14. 14

    C ++在构造函数中初始化对象(多态)

  15. 15

    在类构造函数中初始化const向量(C ++)

  16. 16

    在构造函数 C++ 中初始化结构向量

  17. 17

    C++ 构造函数中的成员初始化语法

  18. 18

    C++中构造函数初始化对象的问题

  19. 19

    在C ++中没有匹配的构造函数来初始化可变参数模板

  20. 20

    具有复杂分配的C ++构造函数初始化器列表

  21. 21

    在 c++ 中的构造函数中初始化 c 数组时出错

  22. 22

    当parens初始化时,构造函数初始化列表中的C ++ 11大括号初始化为什么不起作用?

  23. 23

    C ++在初始化列表中的基类初始化之前调用函数

  24. 24

    模板函数中的C ++静态变量初始化

  25. 25

    C ++:默认在模板函数中初始化整数类型

  26. 26

    C ++构造函数初始化列表中的C struct副本

  27. 27

    在C ++中的类构造函数中进行列表初始化

  28. 28

    如何在 C++ 中的构造函数内初始化二维数组?

  29. 29

    构造函数中的C ++ 2D数据数组-何时初始化和删除?

热门标签

归档