c – 根据模板参数生成不同大小的初始化列表

c – 根据模板参数生成不同大小的初始化列表,第1张

概述我有一个包含没有默认构造函数的对象数组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 Ar @H_301_6@ 我有一个包含没有默认构造函数的对象数组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>{}}     { } };

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

总结

以上是内存溢出为你收集整理的c – 根据模板参数生成不同大小的初始化列表全部内容,希望文章能够帮你解决c – 根据模板参数生成不同大小的初始化列表所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1212164.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存