我有以下问题。我正忙着用C ++编写一个继承结构。简而言之,这就是我想要做的。 A类是基类,B和C类是继承类。类B和C各自具有不同且唯一的成员函数。
现在,使用boost智能指针库,我创建了类型为A的共享指针的向量,如下所示:
class A{
A();
virtual print();
}
class B : public A{
B();
virtual print();
}
class C{
C();
virtual print();
void uniqueFunc();
}
int main(){
vector<shared_ptr<A> > myA;
shared_ptr<B> myB;
shared_ptr<C> myC;
myA.push_back(myB);
myA.push_back(myC);
}
现在我有一个检查向量中成员类型的方法。这不是问题。我的问题是,如何在向量中为类类型C的成员调用uniqueFunc。我不得不贬低?或者我是否必须创建虚拟功能。但是,我确实需要uniqueFunc对C类是唯一的。我想避免创建成员的副本,而是直接更改向量中的成员。
答案 0 :(得分:3)
您需要向下转换为boost::shared_ptr<C>
或在A
中创建虚拟函数。
假设你想要转发,你可以使用Boost的pointer cast functions:
boost::static_pointer_cast<C>(myA.back())->uniqueFunc();
(如果需要动态类型检查,请使用dynamic_pointer_cast<C>
。)