所以说我有一个对象A,像这样
class A {
private:
int x;
public:
A(){};
~A(){};
void sayA() {
std::cout << "A" << std::endl;
}
};
Run Code Online (Sandbox Code Playgroud)
现在,如果我有一个指向的向量 A
std::vector<A *> As;
Run Code Online (Sandbox Code Playgroud)
如何在同时访问方法的同时将的new实例推回A向量sayA?
像这样
As.push_back(new A()->sayA());
Run Code Online (Sandbox Code Playgroud)
只是在这种情况下要指出的A不是我创建的对象,而是图形库的一部分
您可以(ab)emplace_back在C ++ 17中使用:
As.emplace_back(new A())->sayA();
Run Code Online (Sandbox Code Playgroud)
但实际上,IMO这更加清楚:
As.push_back(new A());
As.back()->sayA();
Run Code Online (Sandbox Code Playgroud)
您可以让它sayA返回实例的指针。像这样:
auto sayA() {
std::cout << "A" << std::endl;
return this;
}
Run Code Online (Sandbox Code Playgroud)
然后按如下所示插入实例。
As.push_back((new A())->sayA());
Run Code Online (Sandbox Code Playgroud)
但是除了使它起作用之外,这很尴尬并且很难阅读。考虑使用智能指针向量,并先插入,然后调用方法。如果sayA是对象构造的一部分,请从A的构造函数中调用它。
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |