c++ - 如何检查一个 C++ 类是否扩展了另一个类(比如另一个类是否是一个接口(interface))?

标签 c++ oop interface extension-methods

所以一般有

class A { ... };
class B { ... };
class C: public A, public B {};  // C inherits from A and B.

当我们创建 C 的实例并想将其传递给某个函数时,我们如何检查传递给函数的类是否扩展了 A?

最佳答案

C被定义为继承自 A所以不需要检查:

C 的实例是强制性的也是一个A (和一个 B )。

但是,如果你有一个接受 A 的函数作为参数,您可以使用 dynamic_cast<>检查实例是否真的是 C :

void function(const A& a)
{
  const C* c = dynamic_cast<const C*>(&a);

  if (c)
  {
    // a is an instance of C and you can use c to call methods of C
  } else
  {
    // a is not an instance of C.
  }
}

然而,要使其工作,基类类型必须是多态(它必须至少有一个虚拟方法)。

关于c++ - 如何检查一个 C++ 类是否扩展了另一个类(比如另一个类是否是一个接口(interface))?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4704982/

相关文章:

perl - 为什么我的方法打印 "isObjectName=SCALAR(0x1289df0)"?

c# - 当需要设计模块化架构时,对象转换是现实的必然吗?

c++ - 有没有一种安全的方法可以同时使用 C++11 智能指针和原始指针接口(interface)?

c++ - 用于 GUI 的 CSS 或 C++

C# 覆盖抽象方法(包括输入参数)

c++ - 在C++ 20中按长度排序std::vector <std::string>的代码是否正确?

c++ - 在头文件中编写的类的成员函数的定义,在 C++ 中单独的 .cpp 文件中

c - 使用了未初始化的局部变量 “m”

c++ - 文章 Generic<Programming> Typed Buffers 在 C++ 11 中是否完全过时?

c++ - 在其成员函数返回之前删除对象是未定义的行为吗?