Car*_*oli 0 c++ derived-class stdvector
假设我有一个抽象类
class AbstractClass {
public:
virtual int get() const = 0;
};
Run Code Online (Sandbox Code Playgroud)
和两个不同的派生类
class DerivedClassA : public AbstractClass {
public:
int get() const override { return 1; }
};
class DerivedClassB : public AbstractClass {
public:
int get() const override { return 2; }
};
Run Code Online (Sandbox Code Playgroud)
我想将std::vectorAbstract Classed 传递给给定的函数:
int f(const std::vector<std::shared_ptr<AbstractClass> >& classes) { ... }
Run Code Online (Sandbox Code Playgroud)
我正在做的是这样的:
int main () {
std::vector<std::shared_ptr<AbstractClass> > _classes;
std::shared_ptr<AbstractClass> _derivedA = std::make_shared<DerivedClassA>();
_classes.push_back(_derivedA);
std::shared_ptr<AbstractClass> _derivedB = std::make_shared<DerivedClassB>();
_classes.push_back(_derivedB);
std::cout << f(_classes) << "\n";
}
Run Code Online (Sandbox Code Playgroud)
它确实有效,但我想知道是否有更紧凑的形式可以用现代 C++ 编写它?我尝试auto在某些地方使用,但它总是给出错误,或者就地构建派生类,但效果不佳。
它确实有效,但我想知道是否有更紧凑的形式来编写它
您可以去掉中间变量以使其更加紧凑:
f({
std::make_shared<DerivedClassA>(),
std::make_shared<DerivedClassB>(),
});
Run Code Online (Sandbox Code Playgroud)
由于所有访问说明符都是公共的,因此您可以使用以下方法使类定义更加紧凑struct:
struct DerivedClassB : AbstractClass {
int get() const override { return 1; }
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
291 次 |
| 最近记录: |