这是对上一个问题的跟进。
我正在开发一个库,客户需要为其提供复杂的类型,如矩阵和四元数。在内部,我将使用Eigen来操作这些类型,并且根据链接问题中的讨论,我可能会对 Eigen 的类型进行一个薄包装,并要求客户将这些类型提供给我的库,本质上将 Eigen 隐藏为内部实现细节。
事实上,由于我的一些客户可能已经在使用 Eigen,所以有人建议我在我的 Eigen 类型的包装版本中提供某种类型的 to/from Eigen 函数。
这一切听起来都很好,但我担心如果我的库在内部使用与我的客户使用的不同版本的 Eigen 可能会发生什么。如果这两个版本兼容 ABI,那么我认为没有任何问题。但是,如果它们不是,那么我可以想象一些“坏”的事情正在发生。我特别担心,因为 Eigen 是一个仅限标头的库,我不能假设,例如,我的库和我的客户端都将链接到第三方库的相同编译版本。
如果我为我的用户提供源代码并让他们自己根据 Eigen 进行编译,那么我就不必太担心了。但是,我最关心的是为我的用户编译和安装 DSO/DLL 的情况。
所以,我想我的问题是:我是否必须限制我的客户使用与 ABI 兼容的库版本?我可以为 Eigen 提供必要的标题,但是用户已经在使用 Eigen 会有问题。
我想我可以让我的客户对我的包装器类型进行必要的转换,但我想提供方便的功能。
请注意,虽然我特别在谈论 Eigen,但这个问题可能适用于任何提供类型的第三方库。
谢谢!