我可以找到一种在 C++0x 中执行指定初始化程序的方法,只需初始化一个成员。有没有办法让多个成员初始化?
public struct Point3D
{
Point3D(float x,y) : X_(x) {}
float X;
};
我想 :
public struct Point3D
{
Point3D(float x,y,z) : X_(x), Y_(y), Z_(z) {}
float X_,Y_,Z_;
};
我可以找到一种在 C++0x 中执行指定初始化程序的方法,只需初始化一个成员。有没有办法让多个成员初始化?
public struct Point3D
{
Point3D(float x,y) : X_(x) {}
float X;
};
我想 :
public struct Point3D
{
Point3D(float x,y,z) : X_(x), Y_(y), Z_(z) {}
float X_,Y_,Z_;
};
您的构造函数中有一些错误,这是您应该如何编写它:
/* public */ struct Point3D
// ^^^^^^
// Remove this if you are writing native C++ code!
{
Point3D(float x, float y, float z) : X_(x), Y_(y), Z_(z) {}
// ^^^^^ ^^^^^
// You should specify a type for each argument individually
float X_;
float Y_;
float Z_;
};
请注意,本public
机 C++ 中的关键字具有与您可能期望的不同的含义。只需删除它。
此外,初始化列表(您错误地称为“指定初始化程序”)不是 C++11 的新特性,它们一直存在于 C++ 中。
@Andy 解释了如果您要定义自己的struct
.
但是,还有另一种选择:
#include <tuple>
typedef std::tuple<float, float, float> Point3D;
然后将一些函数定义为:
//non-const version
float& x(Point3D & p) { return std::get<0>(p); }
float& y(Point3D & p) { return std::get<1>(p); }
float& z(Point3D & p) { return std::get<2>(p); }
//const-version
float const& x(Point3D const & p) { return std::get<0>(p); }
float const& y(Point3D const & p) { return std::get<1>(p); }
float const& z(Point3D const & p) { return std::get<2>(p); }
完毕!
现在您可以将其用作:
Point3D p {1,2,3};
x(p) = 10; // changing the x component of p!
z(p) = 10; // changing the z component of p!
意思是代替 p.x
,你写x(p)
。
希望这能给您一些关于如何重用现有代码的起点。