0

メンバーを 1 つだけ初期化して、C++0x で Designated Initializers を実行する方法を見つけることができました。複数のメンバーを初期化する方法はありますか?

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 に答える