c++ - 从库类扩展,然后如何让库调用派生类方法

标签 c++ inheritance

我想知道这是否可能。同样,问题是:

How can I extend from a libraries class, then have the library call a function inside the derived class?

显然,在编写使用继承的代码(如下所示为 DerivedClass)之前,已经构建/编译了该库。我想尽可能地从用户那里抽象出来。为此,我进行了以下设置(包括为简单起见而省略):

LibraryClass 是我创建的 .lib 中的一个类。

LibraryClass.h
class LibraryClass{
public:
    virtual void MyMethod() { }
};

DerivedClass 继承自这个库:

DerivedClass.h
Class DerivedClass: public LibraryClass {
public:
    virtual void MyMethod();
};

如果我在 DerivedClass 源文件中定义 MyMethod 如下:

DerivedClass.cpp
void DerivedClass::MyMethod() {
    cout << "it works!" << endl;
}

库有没有办法调用派生类的方法?我想将 DerivedClass 对象作为指针传递给库,但库无法访问 header 以包含它,因为它已经编译到 .lib 中。

我以前看过这个(Urho3D),他们使用黑魔法还是我遗漏了一些简单的东西?

最佳答案

这正是动态分配(在 C++ 中称为 virtual)所做的:给定一个 Base*(或 Base&) 引用派生类型的对象,即使没有任何 Derived 声明,对虚函数的调用也会找到覆盖(因此即使调用是“首先编译的”) .

至于你的“图书馆提供的main”的想法,这要困难得多:一般来说,图书馆如何知道如何构造你的对象,以及什么会如果你链接到 two “extending classes” 就会这样做?

但这是可能的,如果库为它设计:让库提供一个全局指针变量(如果你想有一个默认值,它在 main 中分配),并让扩展类的构造函数将 this 分配给它。然后只需定义该类类型的全局对象即可。如果不需要默认行为,也可以只在库中声明和调用,而不是定义初始化函数,交给扩展来定义。

关于c++ - 从库类扩展,然后如何让库调用派生类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49597315/

相关文章:

c++ - 使用 OpenMP 的并发和优化

c++ - Boost.Asio TCP move 到套接字析构函数不足以干净地关闭?

数组继承中的 C++ 对象

scala - 用子类参数覆盖子类方法?

javascript - 为 Sequelize 创建中间 BaseModel 类

java - 我们可以使用 C、C++ 或 Java(任何语言)将 PDF 文件转换为 HTML 吗?

c++ - 为程序中所有可能路径的运行生成数据

c++ - 了解 `std::is_move_constructible`

php - 从子方法访问时,父方法设置的父类属性为空

c++ - 当派生类方法不可行时,为什么 C++ 重载决策不查看基类方法?