首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从库类扩展而来,如何使用库调用派生类方法?

从库类扩展而来,如何使用库调用派生类方法?
EN

Stack Overflow用户
提问于 2018-04-01 10:57:25
回答 1查看 1.1K关注 0票数 1

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

如何从库类扩展,然后让库调用派生类中的函数?

显然,在编写使用继承的代码(如下所示为DerivedClass)之前,库已经构建/编译过了。我想尽可能地从用户那里抽象化。为了做到这一点,我做了以下设置(包括为了简单起见而忽略的):

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

代码语言:javascript
复制
LibraryClass.h
class LibraryClass{
public:
    virtual void MyMethod() { }
};

DerivedClass继承自此库:

代码语言:javascript
复制
DerivedClass.h
Class DerivedClass: public LibraryClass {
public:
    virtual void MyMethod();
};

如果我按照以下方式在MyMethod源文件中定义DerivedClass:

代码语言:javascript
复制
DerivedClass.cpp
void DerivedClass::MyMethod() {
    cout << "it works!" << endl;
}

库有任何方法调用派生类的方法吗?我想把一个DerivedClass对象作为指针传递到库中,但是库没有访问标头来包含它的权限,因为它已经编译到.lib了。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-01 13:33:55

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

至于你的“库提供的main”的想法,这要难得多:一般来说,他的图书馆怎么知道如何构造你的对象,如果你用 “extending classes”链接它,它会做什么?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49597315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档