我有一个 C 库,其中包含许多用于处理向量、矩阵、四元数等的数学例程。它需要保留在 C 中,因为我经常将它用于嵌入式工作和作为 Lua 扩展。此外,我有 C++ 类包装器,以允许更方便的对象管理和使用 C API 进行数学运算的运算符重载。包装器仅包含一个头文件,并且尽可能多地使用内联。
包装 C 代码与将实现直接移植和内联到 C++ 类中是否有明显的惩罚?该库用于时间关键型应用程序。那么,消除间接性带来的提升是否弥补了两个端口的维护难题?
C接口示例:
typedef float VECTOR3[3];
void v3_add(VECTOR3 *out, VECTOR3 lhs, VECTOR3 rhs);
C++ 包装器示例:
class Vector3
{
private:
VECTOR3 v_;
public:
// copy constructors, etc...
Vector3& operator+=(const Vector3& rhs)
{
v3_add(&this->v_, this->v_, const_cast<VECTOR3> (rhs.v_));
return *this;
}
Vector3 operator+(const Vector3& rhs) const
{
Vector3 tmp(*this);
tmp += rhs;
return tmp;
}
// more methods...
};