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



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

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

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

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

通常由调用以初始化静态变量的函数来完成:

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

最新更新