1

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

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

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

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

4

1 回答 1

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;
  }();
于 2013-10-03T08:03:17.410 回答