如何根据模板参数生成不同大小的初始化列表?

2026-04-16 19:272阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计275个文字,预计阅读时间需要2分钟。

如何根据模板参数生成不同大小的初始化列表?

javapublic class T { private boolean hasDefaultConstructor;

public T() { this.hasDefaultConstructor=true; }

public boolean isHasDefaultConstructor() { return hasDefaultConstructor; }}

我有一个包含没有默认构造函数的对象数组T的类.这是一个例子:

如何根据模板参数生成不同大小的初始化列表?

#include <iostream> struct Param { int x; }; struct A { A(const Param &p) { std::cout << p.x << std::endl; } }; template<class T, int n> struct Array { T data[n]; /* n times */ Array(const Param &p) : data{/* T(p), ..., T(p) */} { } }; int main() { Param p{42}; Array<A, 3> arr(p); return 0; }

我正在寻找一种方法,使用包含正好n个元素的元素T(p)的不同大小的初始化列表来初始化数据字段.我有一种感觉,它可以通过像std :: make_index_sequence这样的构造来实现,但我找不到合适的东西.

我想你可以使用委托构造函数,std :: index_sequence和std :: make_index_sequence以及重写数组如下(编辑:回答由SergeyA和Rakete1111改进;谢谢!)

template <typename T, std::size_t N> struct Array { T data[N]; template <std::size_t ... Is> Array (Param const & p, std::index_sequence<Is...> const &) : data { ((void)Is, T{p}) ... } { } Array(const Param &p) : Array{p, std::make_index_sequence<N>{}} { } };

也许你可以私有新的构造函数.

标签:初始化

本文共计275个文字,预计阅读时间需要2分钟。

如何根据模板参数生成不同大小的初始化列表?

javapublic class T { private boolean hasDefaultConstructor;

public T() { this.hasDefaultConstructor=true; }

public boolean isHasDefaultConstructor() { return hasDefaultConstructor; }}

我有一个包含没有默认构造函数的对象数组T的类.这是一个例子:

如何根据模板参数生成不同大小的初始化列表?

#include <iostream> struct Param { int x; }; struct A { A(const Param &p) { std::cout << p.x << std::endl; } }; template<class T, int n> struct Array { T data[n]; /* n times */ Array(const Param &p) : data{/* T(p), ..., T(p) */} { } }; int main() { Param p{42}; Array<A, 3> arr(p); return 0; }

我正在寻找一种方法,使用包含正好n个元素的元素T(p)的不同大小的初始化列表来初始化数据字段.我有一种感觉,它可以通过像std :: make_index_sequence这样的构造来实现,但我找不到合适的东西.

我想你可以使用委托构造函数,std :: index_sequence和std :: make_index_sequence以及重写数组如下(编辑:回答由SergeyA和Rakete1111改进;谢谢!)

template <typename T, std::size_t N> struct Array { T data[N]; template <std::size_t ... Is> Array (Param const & p, std::index_sequence<Is...> const &) : data { ((void)Is, T{p}) ... } { } Array(const Param &p) : Array{p, std::make_index_sequence<N>{}} { } };

也许你可以私有新的构造函数.

标签:初始化