3

我有一堂课:

Temp.h:
[...]
class Temp{
public:
    Temp(vector<vector<double> > vect);
    const static Temp VAR1;
    const static Temp VAR2;
    ...

};

我想使用双精度数组初始化 VAR1 和 VAR2:{{0,1,0,1},{1,0,1,0}}。但我不能这样做:

const Temp::VAR1(...);

,因为没有“单行”运算符可以从数组数组构造向量向量。我想到了建筑结构,比如:

B{
    vector<vector<double> > vect;

    B& add (double[] a, int number) {... 
    push elements from array to vector and add this vector to vect ...
    return *this;
    }

    Temp build() {return Temp(vect);}
}

但是当我打电话时:

 B().add({0,1,0,1},4).add({1,0,1,0},4).build();

编译器无法将 {0,1,0,1} 识别为数组,而是将其识别为 double*,我无法更改它。

是否有任何选项可以创建一些方法或类似的东西来在多行中初始化 const 静态成员?

我希望我写的足够简单,如果没有,我稍后会编辑它。

4

2 回答 2

3

在 C++11 中,使用统一的初始化语法:

const Temp::VAR1{{0,1,0,1},{1,0,1,0}};

如果您必须与 C++03 保持兼容,我建议您使用boost::assign

const Temp::VAR1 = list_of(list_of(0)(1)(0)(1))(list_of(1)(0)(1)(0));
于 2012-07-25T16:20:18.627 回答
2

编写一个初始化它的静态函数:

Temp InitTempVar1()
{
    vector<vector<double> > init;
    // initialize init...
    return Temp(init);
}

Temp InitTempVar2()
{
    vector<vector<double> > init;
    // initialize init...
    return Temp(init);
}

const Temp Temp::VAR1 = InitTempVar1();
const Temp Temp::VAR2 = InitTempVar2();
于 2012-07-25T16:25:31.787 回答