2013-10-03 111 views
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); 

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

+1

也许能帮助:http://stackoverflow.com/questions/1197106/static-constructors-in-c-need-to-initialize-private-static-objects – codeling

回答

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