我正在开发一个 C++ 库,用户将在其中提供复杂的输入,例如矩阵和四元数。我不想重新实现这些类型,所以在内部,我将使用Eigen库。
我正在尝试确定将这些类型公开给我的库客户端的最佳方式,并为我的 API 提供了一些选项。我以四元数类型为例,但这同样适用于矩阵等。此外,虽然我专门谈论公开 Eigen 的类型,但我想这个问题同样适用于正在使用的其他外部库。
1) 只使用基本的 C++ 类型
此选项将要求客户端通过基本类型传入数据。例如,要传入一个四元数(4 个元素),可以这样做:
void my_func(double my_quat[4])
2) 暴露 Eigen 的类型
Eigen 为数组和四元数提供了几种模板类型。例如,如果一个函数需要一个四元数,我可以使用 Eigen 的Quaterniond
类型(它实际上是 的 typedef Quaternion<double>
):
void my_func(const Eigen::Quaterniond& my_quat)
3)为客户的各种类型创建一个简单的包装器
我可以创建一个非常简单的四元数类型(例如,某种简单的结构),客户端必须创建(可能通过某种工厂函数)才能传递给我的 API:
void my_func(const quaternion_t& my_quat)
我的库会将quaternion_t
类型转换为我的内部特征表示。
我不太喜欢选项 1,因为我希望在我的 API 中有更强的打字感。选项 2 将要求我的客户也使用 Eigen,更不用说如果他们使用不同版本的 Eigen 时可能存在的兼容性问题(顺便说一下,如果重要的话,Eigen 是一个仅限标头的库)。剩下的选项3。
人们怎么看?我基本上回答了我自己的问题吗?有什么例子吗?
相关问题
此处提出了一个相关问题,但并未真正详细说明是否应该公开外部类型。