Самое чистое, что нужно было сделать, это наследовать от структуры C:
struct point
{
long x, y;
};
class Point : public struct point
{
public:
Point(long x, long y)
{ this->x=x; this->y=y; }
float Distance(Point &point)
{ return ....; }
}
Компилятор C ++ гарантирует, что точка структуры стиля C имеет ту же компоновку, что и компилятор C. Класс C ++ Point наследует этот макет для своей части базового класса (и, поскольку он не добавляет данных или виртуальных членов, он будет иметь такой же макет). Указатель на класс Point будет преобразован в указатель на struct point без приведения, поскольку преобразование в указатель базового класса всегда поддерживается. Таким образом, вы можете использовать объекты класса Point и свободно передавать им указатели на функции C, ожидающие указатель на struct point.
Конечно, если уже существует файл заголовка C, определяющий точку структуры, то вы можете просто включить это вместо повторения определения.