如何“动态”初始化静态成员变量?

时间:2013-10-03 07:55:49

标签: c++ static-members

如何初始化静态成员变量"动态"?

例如,我在类的头文件中声明了这个变量:

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 );

我应该把上面的代码放在哪里?

1 个答案:

答案 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;
  }();