如何在初始化时将不同数量的对象包括在初始化列表中?

用户名

我需要根据提供的“定义”和不同的ctor参数包括不同数量的对象

inline static std::array<A::Output, NUM_OUTPUTS> s_Outputs =
{
#if NUM_OUTPUTS > 0
    A::Output{0}
#endif
#if NUM_OUTPUTS > 1
    , A::Output{1}
#endif
#if NUM_OUTPUTS > 2
    , A::Output{2}
#endif
};

好吧,这取决于NUM_OUTPUTS对象的相应数量。每个对象都有一个索引,第一个是' 0',第二个是' +1'。

有没有办法更好地做到这一点?可能在此类声明或其他任何内容中推出的宏。

杰乔

使用std::make_index_sequence变量模板,您可以做。

#include <utility>  // std::integer_sequence

template <std::size_t... I>
constexpr auto makeArray(std::index_sequence<I...>)
{
   return std::array<A::Output, sizeof...(I)>{I...};
}
template<std::size_t NUM_OUTPUTS>
constexpr static std::array<A::Output, NUM_OUTPUTS> s_Outputs = makeArray(std::make_index_sequence<NUM_OUTPUTS>{});

现在你可以

constexpr auto arr1 = s_Outputs<1>;  // 0
constexpr auto arr2 = s_Outputs<2>;  // 0 1
constexpr auto arr3 = s_Outputs<3>;  // 0 1 2

请参见在线演示

请注意,以上解决方案需要编译器支持。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在初始化时使用可变参数来在初始化时包括不同数量的对象?

我如何在初始化列表中的构造函数之后初始化变量/对象?

如何在VBA中初始化对象的属性的帮助下初始化对象

如何在 Golang 中初始化嵌套列表?

如何在 Terraform 中初始化列表?

如何在构造函数中初始化列表?

如何在Java中初始化对象的静态数组

如何在Java中初始化List <String>对象?

如何在C ++中取消初始化对象?

如何在 Java 中静态初始化对象数组

如何在TypeScript中初始化对象

如何在C ++中初始化对象引用?

如何在构造函数中初始化对象数组?

如何在Java中初始化ThreadLocal对象

如何在Java中初始化对象数组

如何在Javascript中初始化类对象

如何在python中初始化time()对象

如何在Java中初始化Graphics对象?

如何在Delphi中从导入的DLL初始化对象?

如何在 .NET 中初始化通用对象

如何在 Python 中重新初始化类对象?

如何在 Python 中重新初始化类对象?

如何在不使用匿名对象的情况下初始化列表初始值设定项中的对象?

初始化时如何在类的构造函数调用中容纳InputStream对象的FileInputStream对象?

如何在python中获取所有已初始化对象和函数定义的列表?

初始化列表之前的对象初始化

如何使用初始化列表初始化地图

成员初始化列表中的初始化

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