我可以找到一种方法在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_;
};
答案 0 :(得分:4)
你的构造函数中有一些错误,这是你应该如何写它:
/* 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_;
};
请注意,本机C ++中的public
关键字的含义与您可能期望的含义不同。只需删除它。
此外,初始化列表(您错误地称之为"指定的初始化器")不是C ++ 11的新功能,它们一直存在于C ++中。
答案 1 :(得分:0)
@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)
。
希望能为您提供一些关于如何重用现有代码的起点。