提升智能指针:我能以更简洁的方式表达吗?

Mac*_*rko 0 c++ boost smart-pointers shared-ptr

今天我一直在使用Boost :: shared_ptr,我有一个问题.

vector<shared_ptr<KlasaA> > vec;
vec.push_back(shared_ptr<KlasaA>(new KlasaB));
vec.push_back(shared_ptr<KlasaA>(new KlasaC));
vec.push_back(shared_ptr<KlasaA>(new KlasaC));
vec.push_back(shared_ptr<KlasaA>(new KlasaA));

for (vector<shared_ptr<KlasaA> >::const_iterator c_it = vec.begin();
    c_it != vec.end(); ++c_it)
{
    cout << c_it->get()->foo(10) << endl;
}
Run Code Online (Sandbox Code Playgroud)

上面的循环遍历向量并以多态方式调用foo(10).

我的问题是:

能够...

for (vector<shared_ptr<KlasaA> >::const_iterator c_it = vec.begin();
    c_it != vec.end(); ++c_it)
Run Code Online (Sandbox Code Playgroud)

cout << c_it->get()->foo(10) << endl;
Run Code Online (Sandbox Code Playgroud)

以更简洁的方式表达?提前致谢.

Eri*_*rik 6

typedef boost::shared_ptr<KlasaA> SharedKlasaA;
typedef vector<SharedKlasaA> KlasaAVector;

KlasaAVector vec;
vec.push_back(SharedKlasaA(new KlasaB));
...
for (KlasaAVector::const_iterator ...

cout << (*c_it)->foo(10);
Run Code Online (Sandbox Code Playgroud)