c++ - 在 C++ 中调用继承的类特定函数

标签 c++ boost smart-pointers

我有以下问题。我正忙于用 C++ 编写继承结构。简而言之,这就是我想要做的。 A类是基类,B、C类是继承类。 B 类和 C 类各有不同且独特的成员函数。

现在,使用 boost 智能指针库,我创建了一个类类型 A 的共享指针 vector ,如下所示:

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);

}

现在我有了一种检查 vector 中成员类型的方法。这不是问题。我的问题是,如何在 vector 中为类类型 C 的成员调用 uniqueFunc。我必须沮丧吗?或者我是否必须创建虚函数。但是,我确实需要 uniqueFunc 对类 C 是唯一的。我想避免创建成员的拷贝,而是直接更改 vector 中的成员。

最佳答案

你要么向下转换为boost::shared_ptr<C>或者在 A 中创建一个虚函数.

假设你想向下转型,你可以使用 Boost 的 pointer cast functions :

boost::static_pointer_cast<C>(myA.back())->uniqueFunc();

(如果需要动态类型检查,则使用 dynamic_pointer_cast<C>。)

关于c++ - 在 C++ 中调用继承的类特定函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12535625/

相关文章:

c++ - 将 stdout、stderr、cout、cerr 重定向到文件和屏幕

c++ - Spirit X3,指的是之前匹配的值

c++ - 将智能指针作为参数传递给函数

c++ - 放弃 auto_ptr

c++ - 如何处理读入 ASIO streambuf 的额外字符?

c++ - 两个串联模板,每个模板都有一个概念约束

c++ - 如何避免来自继承的属性冗余

c++ - boost::posix_time::microsec_clock 以微秒分辨率加倍秒

c++ - 在不关闭连接的情况下循环 boost asio加密

c - 编译为 C 的语言中的智能指针