如果在构造中使用它们,则自动创建成员

时间:2012-07-20 21:44:40

标签: c++ templates generics boost metaprogramming

假设我有一个填充doubles s的结构(或我只用于存储的类)。我创建了一个构造函数来分配给那些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)

1 个答案:

答案 0 :(得分: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});