gpt4 book ai didi

c++ - 在 C++ 中设计接口(interface)

转载 作者:太空狗 更新时间:2023-10-29 20:11:53 26 4
gpt4 key购买 nike

我正在开发一个可以用作动态加载的接口(interface)。而且它应该是独立于编译器的。所以我想导出接口(interface)。我现在面临以下问题..

问题 1:接口(interface)函数采用一些自定义数据类型(基本上是类或结构)作为 In\Out 参数。我想使用构造函数使用默认值初始化这些类的成员。如果我这样做,则不可能动态加载我的库,它变得依赖于编译器。如何解决这个问题。

问题 2:某些接口(interface)将元素的列表(或映射)返回给客户端。我为此目的使用标准容器。但这也再次依赖于编译器(有时也依赖于编译器版本)。

谢谢。

最佳答案

不同编译的代码只有采用相同的代码才能协同工作Application Binary Interface (ABI)对于用于参数和返回值的类型集。 ABI 在更深层次上很重要——名称修改、虚拟调度表等,但我的观点是,如果你的编译器支持允许调用具有简单类型的函数,你至少可以考虑将一些支持组合在一起,以支持更复杂的类型例如标准容器和用户定义类型的编译器特定实现。

您必须研究您的编译器提供的 ABI 支持,并推断您可以推断出它们将继续提供的内容。

如果您想支持相关 ABI 标准化之外的其他类型,选项包括:

  • 使用更简单的类型来暴露更复杂类型的内部结构

    • 通过my_std_string.data() 提取的[const] char*size_t 或者&my_std_string[0]my_std_string.size(),与 std::vector

    • 类似
    • 序列化数据并使用接收方的数据结构反序列化(可能很慢)

  • 提供一组函数指针,指向由创建数据类型的对象实现的简单访问器/修改器函数

    • 例如经典 C qsort 函数接受指向元素比较函数的指针的方式

关于c++ - 在 C++ 中设计接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30451865/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com