首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从libuv句柄继承

从libuv句柄继承
EN

Stack Overflow用户
提问于 2020-07-23 12:28:33
回答 1查看 73关注 0票数 1

libuv句柄有一个void* data字段来传递任何上下文信息(C-land中非常标准的回调模式)。但是,由于我在C++-land中工作,所以我想使用继承直接将上下文存储在句柄中。主要优点是存储多个上下文项,IIUC需要堆分配来将它们“组合”到一个指针中,比如std::tuple<...>*或一些临时结构(如果我在这里错了,即使在C-land中也可以避免堆分配)。

我的主要忧虑是:

指向句柄的

  1. 指针最终在C-land ( libuv库)中使用。
  2. libuv有自己的伪继承系统,通过在孩子中重复来自父母的字段。这似乎类似于编译器如何在派生类中布局基类中的字段。不确定这将如何与inheritance.
  3. From交互--我已经研究过了,标准并没有真正定义任何用于继承的内存布局,这取决于编译器。不确定这是否会影响事物。

所以,我可以在C++中安全地继承libuv句柄吗?加分,如果你能澄清上面的点,以及。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-23 12:53:18

如果是您自己分配句柄,然后将它们传递给libuv,那么没有什么可以阻止您继承它们。您可以任意分配它们。你可以让他们成为你们班的一员,但也可以使他们成为你们班的基础。

编译器不允许仅仅因为libuv句柄是一个基类就更改它的内存布局。它可以决定基在整个类结构中的位置,但不允许改变基本身。(否则,指向基类的指针必须以不同的方式工作,这取决于您分配的是基类的实例还是派生类的实例!)

由于编译器无法更改内存布局,所以libuv所做的任何操作都是无关紧要的。如果它与普通的libuv句柄对象一起工作,那么当它们被用作基类时,它仍然可以工作。

注意:如果继承libuv句柄仍然让您感到不舒服,您可以将句柄作为类的成员分配,并将指向整个类的指针存储在libuv的"context“字段中。

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

https://stackoverflow.com/questions/63054280

复制
相关文章

相似问题

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