C ++初始化非静态成员数组 [英] C++ Initializing Non-Static Member Array
问题描述
我正在编辑一些旧的C ++ $ C $使用像这样定义的全局阵列C:
I am working on editing some old C++ code that uses global arrays defined like so:
int posLShd[5] = {250, 330, 512, 600, 680};
int posLArm[5] = {760, 635, 512, 320, 265};
int posRShd[5] = {765, 610, 512, 440, 380};
int posRArm[5] = {260, 385, 512, 690, 750};
int posNeck[5] = {615, 565, 512, 465, 415};
int posHead[5] = {655, 565, 512, 420, 370};
我要让所有这些阵列下面定义的机器人类的私有成员。然而,C ++编译器不会让我初始化数据成员,当我宣布他们。
I want to make all of these arrays private members of the Robot class defined below. However, the C++ compiler does not let me initialize data members when I declare them.
class Robot
{
private:
int posLShd[5];
int posLArm[5];
int posRShd[5];
int posRArm[5];
int posNeck[5];
int posHead[5];
public:
Robot();
~Robot();
};
Robot::Robot()
{
// initialize arrays
}
我要初始化这六个数组元素的机器人()构造函数。有没有什么方式比一个分配每个元素一个做到这一点其他?
I want to initialize the elements of these six arrays in the Robot() constructor. Is there any way to do this other than assigning each element one by one?
推荐答案
如果您的要求真的允许,那么你可以将这些5阵列为类的静态
数据成员和而在.cpp文件中定义象下面这样初始化它们:
If your requirement really permits then you can make these 5 arrays as static
data members of your class and initialize them while defining in .cpp file like below:
class Robot
{
static int posLShd[5];
//...
};
int Robot::posLShd[5] = {250, 330, 512, 600, 680}; // in .cpp file
如果这是不可能的,那么,这个声明数组作为与往常不同的名称,并使用的memcpy()
为您的构造函数中的数据成员。
If that is not possible then, declare this arrays as usual with different name and use memcpy()
for data members inside your constructor.
修改:
对于非静态成员,下面模板
风格可以使用(任何类型的如 INT
)。为了改变大小,只需超载同样元素的个数:
Edit:
For non static members, below template
style can be used (for any type like int
). For changing the size, simply overload number of elements likewise:
template<size_t SIZE, typename T, T _0, T _1, T _2, T _3, T _4>
struct Array
{
Array (T (&a)[SIZE])
{
a[0] = _0;
a[1] = _1;
a[2] = _2;
a[3] = _3;
a[4] = _4;
}
};
struct Robot
{
int posLShd[5];
int posLArm[5];
Robot()
{
Array<5,int,250,330,512,600,680> o1(posLShd);
Array<5,int,760,635,512,320,265> o2(posLArm);
}
};
C ++ 11
该数组初始化现已成为微不足道的:
C++11
The array initialization has now become trivial:
class Robot
{
private:
int posLShd[5];
...
public:
Robot() : posLShd{0, 1, 2, 3, 4}, ...
{}
};
这篇关于C ++初始化非静态成员数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!