0

我可以找到一种在 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_;
};
4

2 回答 2

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_;
};

请注意,本public机 C++ 中的关键字具有与您可能期望的不同的含义。只需删除它。

此外,初始化列表(您错误地称为“指定初始化程序”)不是 C++11 的新特性,它们一直存在于 C++ 中。

于 2013-03-08T11:15:49.570 回答
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)

希望这能给您一些关于如何重用现有代码的起点。

于 2013-03-08T11:31:01.113 回答