C++ 0x指定的初始化程序
我可以找到一种方法来执行C++ 0x中的指定初始化程序,只有一个成员正在初始化。 有多种成员初始化的方法吗?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_;
};
注意,在本地C的public
关键字++有一个不同于你可能期望的含义。只要删除它。
此外,初始化列表(您错误地称为“指定初始化程序”)不是C++ 11的新功能,它们一直存在于C++中。
哈哈。感谢您让我知道它是初始化列表 – 2013-03-08 11:24:28
@Mahdi:这是如何在本机C++中调用至少:-)不知道C++ .NET – 2013-03-08 11:25:25
@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-08 11:15:48
另一种选择:'typedef std :: tuple Point3D;',然后使用'Point3D'。 –
Nawaz
2013-03-08 11:26:45