如何初始化静态成员变量"动态"?
例如,我在类的头文件中声明了这个变量:
class MyPermutation {
static std::array<std::vector<uint8_t>,2> permutation_list;
};
我希望它具有以下值:
permutation_list[0] = std::vector<uint8_t>{0};
permutation_list[1] = std::vector<uint8_t>{};
for ( uint8_t i = 0; i < 8; i++ )
permutation_list[1].push_back( 1<<i );
我应该把上面的代码放在哪里?
答案 0 :(得分:3)
这通常由调用初始化静态变量的函数完成:
std::array<std::vector<uint8_t>,2> MyPermutation::permutation_list = someFunctionThatBuildsTheInitialValues();
或者,从C ++ 11开始,它可以是lambda:
std::array<std::vector<uint8_t>,2> MyPermutation::permutation_list =
[]() -> std::array<std::vector<uint8_t>,2> {
std::array<std::vector<uint8_t>,2> the_list;
the_list[0] = std::vector<uint8_t>{0};
the_list[1] = std::vector<uint8_t>{};
for ( uint8_t i = 0; i < 8; i++ )
the_list[1].push_back( 1<<i );
/* ... */
return the_list;
}();