0

sで満たされた構造体 (または格納するためだけに使用するクラス) があるとしdoublesます。doublesこれらの sに割り当てるコンストラクターを作成します。

struct Point {
  double time;
  double x;
  double y;
  Point(double a_time, double a_x, double a_y)
    : time(a_time), x(a_x), y(a_y) {}
}

コンストラクターでメンバーが既に宣言されている場合、クラスでメンバーを宣言するのは冗長に思えます。コンストラクターで使用されるメンバーが自動的にクラスのパブリック メンバーになるように、これらの冗長性を減らす方法はありますか? 他のメンバー関数にも役立つ場合があります。

この例は、 Programming: Principles and Practice Using C++の 348 ページにあるものと似ています。したがって、これは現在確立されているコーディング スタイルです。さらに、最新の C++ スタイルのソリューション、つまりプリプロセッサなしのソリューションを探しています。

更新 (1) この構造体は次のように使用する必要があります。

vector<Point> points
points.push_back(t0,x0,y0)
4

1 に答える 1

3

あなたがそれを持っている方法は完全に素晴らしいです。ただし、デフォルト値のみを指定する場合は、C ++ 11でメンバーを直接初期化でき、コンストラクターは必要ありません。

struct Point {
  double time = 0.0;
  double x = 0.0;
  double y = 0.0;
};

また、この構造体は単なるデータの袋のように見えます。その場合は、C++11なしで機能する集約初期化を使用することもできます。

例1

struct Point {
  double time;
  double x;
  double y;
} p = {0.0, 0.0, 0.0};

例2

struct Point {
  double time;
  double x;
  double y;
};

Point p1 = {0.0, 0.0, 0.0};

更新後

push_backフラットデータ型では、次のように使用できます。

v.push_back({t0, x0, y0});
于 2012-07-20T21:56:38.097 に答える