2013-03-08 79 views
0

我可以找到一种方法来执行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_; 
}; 
+1

你究竟想达到什么目的? – 2013-03-08 11:15:48

+0

另一种选择:'typedef std :: tuple Point3D;',然后使用'Point3D'。 – Nawaz 2013-03-08 11:26:45

回答

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++中。

+0

哈哈。感谢您让我知道它是初始化列表 – 2013-03-08 11:24:28

+0

@Mahdi:这是如何在本机C++中调用至少:-)不知道C++ .NET – 2013-03-08 11:25:25

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)

希望能给你一些起点,以便如何重用现有的代码。