2012-07-20 21 views
0

假设我有一个结构(或我只用于存储类)填充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) 
+0

你可以围绕它做在某些情况下其他的方式:HTTP:// WWW2 .research.att.com /〜bs/C++ 0xFAQ.html#member-init – chris 2012-07-20 21:45:33

+0

你有什么建议当类有多个构造函数? – 2012-07-20 21:48:33

+0

为什么要声明构造函数中使用的所有类的public成员? – Martin 2012-07-20 21:48:56

回答

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}); 
+0

请参阅更新(1) – 2012-07-20 22:00:31

+1

@kirill_igum:我将删除构造函数并使用'push_back'就像我的例子。 – 2012-07-20 22:03:06

+0

好的,只是检查它。它的工作原理,谢谢 – 2012-07-20 22:15:02

相关问题