在一行中定义并初始化stl常量
Define and initialize stl constant in one line
我有一个类:
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静态成员?
我希望我写得足够简单,如果没有,我以后会编辑它。
在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));
编写一个初始化它的静态函数:
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();
相关文章:
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- Boost Python Numpy - 要初始化的未定义引用
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- C++类中的类作为自定义向量(如何初始化?
- 初始化类定义中的结构数组
- C++ 如何检查 char 变量是否未定义(未初始化)
- C++列表初始化允许多个用户定义的转换
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- (C++)我的自定义数组无法初始化(编译错误)
- 类模板静态数据成员定义/声明/初始化
- 初始化在类类型 #define 中定义的非静态成员数组,不带默认 ctor
- 在另一个文件中初始化的 extern 数组中未定义的引用
- thread_local静态成员模板定义:初始化失败,GCC
- 通过用户定义的转换初始化引用
- 自定义初始化数组与 std::make_unique
- C++具有自定义初始化的静态调度
- 导入错误:动态模块未定义初始化函数
- 有没有一种标准的方法可以在初始化阶段运行一些代码并定义初始化的顺序
- C++,为什么我不能把带有参数的类构造函数的定义-初始化列表放在类声明之外
- 是否需要在头文件中定义初始化列表