2013-12-10 81 views
1

是否有像boost :: ant或boost :: variant这样的变体的实现,但是抽象接口呢?C++抽象变体实现

我想要的是在松散耦合的应用程序中传递DLL之间的变体。因此,如果一个DLL开始在变体中存储新的东西,我想避免更改所有其他DLL的代码。所有这些DLL都是用不同版本的VisualStudio和静态CRT链接构建的,所以不能在接口中使用STL类。提升依赖性也不受欢迎。那就是为什么我会使用抽象接口。

如果让我来实现它,我会做一个抽象接口与像MyVariantInterface::Get/SetData(int value_type_tag, byte* data) = 0功能,可的DLL之间传递安全,加上一个模板包装允许方便储存,提取和做所有尺寸/类型检查一个DLL的范围内。

这样的事情已经存在吗?

+0

您是否需要预定义类型或任意数量的用户定义类型?例如。来自QT的QVariant仅支持有限的类型,但如果您不依赖于QT,可能会拉得太多。 – Peter

+0

不幸的是,我们并没有在项目范围内使用QT;( 用户定义的类型非常吸引人,而且预先定义的类型解决方案也是值得考虑的。 – Steed

回答

1

对于Windows,您可以使用VARIANT,这在COM中使用很多。

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

+0

谢谢您是否知道关于此的一个很好的示例或文档?有些神秘。 – Steed

+0

所有的功能都是[here](http://msdn.microsoft.com/en-us/library/windows/desktop/bb762286(v = vs.85).aspx)。如果你有一个特定的问题也许你应该发布一个新的SO问题。 – egur

+0

谢谢,这个链接是我所要求的。 – Steed