我有这个:
class point{
public:
point()=default;
point(int x,int y):x(x),y(y){}
int x,y;
}
和此:
class quad{
public:
quad()=default;
quad(point a,point b,point c, point c):a(a),b(b),c(c),d(d){};
point a,b,c,d;
}
总的来说,我可以这样做:
point a(0,0),b(1,1),c(2,2),d(3,3);
quad q(a,b,c,d);
或直接这:
quad q(point(0,0),point(1,1),point(2,2),point(3,3));
但当然不是这样:
quad q(0,0,1,1,2,2,3,3); // I know it's wrong
问题:
是否可以在不声明quad
中使用8个整数的新构造函数来使用最后一个代码?这个问题的动机是emplace_back
的工作方式。更清楚:
std::vector<point> points;
points.push_back(point(0,0)); // you have to pass object
points.emplace_back(0,0); // you have just to send the arguments of the constructor
答案 0 :(得分:7)
如果没有声明新的构造函数,这是不可能的。
一种选择是为每个点传递大括号初始值设定项:
quad q({0,0},{1,1},{2,2},{3,3});