编译期间的 std::array 类成员集?
Posted
技术标签:
【中文标题】编译期间的 std::array 类成员集?【英文标题】:std::array class member set during compile time? 【发布时间】:2016-07-13 10:09:57 【问题描述】:我有一个带有私有成员 std::array<int,10> m_arr;
的类,默认情况下它包含零,但在一种情况下,它必须设置为其他值。
该类有一个设置器
void setArray(const std::array<int,10>& arr)
m_arr=arr;
但是我想知道是否可以在特定情况下以某种方式在编译时完成设置? 提前致谢。
【问题讨论】:
这取决于该用例的确切区别? 在编译时知道const std::array<int,10>& arr
参数应该是可能的。如果是用户输入等,这是不可能的
在那种情况下,所有的值都需要不是 0 还是它们会有不同的值?
const std::array<int,10>& arr
在编译时是已知的,而不是用户输入,并且值为零。
你需要constexpr
,而不仅仅是const
【参考方案1】:
可能的解决方案如下:
#include<utility>
#include<array>
struct S
constexpr S(): arr
template<std::size_t... I>
constexpr S(std::integer_sequence<std::size_t, I...>): arr I...
std::array<std::size_t, 10> arr;
;
int main()
constexpr S s1;
constexpr S s2std::integer_sequence<std::size_t, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1>;
// equivalent to: constexpr S s3std::integer_sequence<std::size_t, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9>;
constexpr S s3std::make_index_sequence<10>;
请注意,integer_sequence
是 C++14 修订版的一部分。
无论如何,您可以在网上找到适合基于 C++11 的项目的这种结构的实现。
【讨论】:
以上是关于编译期间的 std::array 类成员集?的主要内容,如果未能解决你的问题,请参考以下文章