我有一个班级:
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静态成员的行多于一行?
我希望我写得够简单,如果没有,我会稍后编辑。
答案 0 :(得分: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));
答案 1 :(得分: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();