У меня есть библиотека C с многочисленными математическими программами для работы с векторами, матрицами, кватернионами и так далее. Он должен оставаться в C, потому что я часто использую его для встроенной работы и как расширение Lua. Кроме того, у меня есть оболочки класса C++, позволяющие более удобное управление объектами и перегрузка операторов для математических операций с использованием C API. Оболочка состоит только из файла заголовка, и как можно больше используется для наложения.Как синхронизировать библиотеки C & C++ с минимальным штрафом за производительность?
Есть ли заметное наказание за упаковку кода 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...
};
Использование встроенных C++ или C функций с макросами - хорошая идея, которую я не рассматривал. –