C++ 抽象变体实现

标签 c++ dll abstract-class variant

是否有像 boost::ant 或 boost::variant 这样的变体的任何实现,但具有抽象接口(interface)?

我想要的是在松散耦合的应用程序中的 DLL 之间传递变体。因此,如果一个 DLL 开始在变体中存储新内容,我想避免更改所有其他 DLL 的代码。所有的 DLL 都是用不同版本的 VisualStudio 和静态 CRT 链接构建的,因此不能在接口(interface)中使用 STL 类。 Boost 依赖性也是不可取的。这就是为什么我想要一个抽象接口(interface)。

如果我必须实现它,我会使用 MyVariantInterface::Get/SetData(int value_type_tag, byte* data) = 0 等函数创建一个抽象接口(interface),它可以在 DLL 之间安全地传递,加上一个模板化的包装器,它允许方便地存储、提取并在一个 DLL 的范围内进行所有大小/类型检查。

这样的东西已经存在了吗?

最佳答案

对于 Windows,您可以使用 VARIANT这在 COM 中被大量使用。

没有额外的依赖。 VARIANT 支持多种类型,包括 COM 接口(interface)(例如 IUknown)。您甚至可以用它传递多维数组。

关于C++ 抽象变体实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20489418/

相关文章:

java - 如何在没有多重继承的情况下避免代码重复(即在 java 中)?

Python abc 模块 : Extending both an abstract base class and an exception-derived class leads to surprising behavior

python - Python中的抽象方法

C++、Linux、套接字发送性能

c++ - 添加 QSound 后应用程序部署不起作用

c++ - 我能否获取模板类型的 "iterator",无论该类型是数组还是类似 STL 的容器?

c++ - pImpl 是否从根本上解决了 C++ DLL 问题?

c++ - 如何在 C++ 中读取性能计数器

PHP 启动 : Unable to load dynamic library 'C:\\xampp\\php\\ext\\php_sqlsrv_7_nts.dll'

.net - 来自外部 dll 的数据类型问题