2013-03-08 75 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)

希望能給你一些起點,以便如何重用現有的代碼。