Я в процессе написания интерфейса C для библиотеки С++, и я ищу некоторые высококачественные примеры (или лучшие практики).
Пока это выглядит довольно многообещающе: http://czmq.zeromq.org/manual:czmq
Любые другие предложения?
Я в процессе написания интерфейса C для библиотеки С++, и я ищу некоторые высококачественные примеры (или лучшие практики).
Пока это выглядит довольно многообещающе: http://czmq.zeromq.org/manual:czmq
Любые другие предложения?
Вы можете заглянуть в Parma Polyhedra Library в качестве примера превосходного интерфейса C к хорошо написанной библиотеке С++. PPL - бесплатное программное обеспечение GPL-ed, особенно используемое внутри компилятора GCC.
Другим примером высокого качества является Open Dynamics Engine. Он имеет С++-сервер и C-интерфейс. Все связано с C.
Если ваша библиотека С++ написана как COM в Windows. Есть инструменты для автоматического создания интерфейса C для него.
Я могу предложить FTGL, который является библиотекой С++, предоставляющей интерфейс C. Вот две примеры программ, которые достигают точно такой же:
Отметим также, что FTGL использует парадигму pImpl, чтобы обеспечить двоичную совместимость между версиями. См. здесь, почему это хорошо.
Отказ от ответственности: я являюсь участником FTGL.
libGLU (библиотека утилиты OpenGL) частично написана на С++: http://cgit.freedesktop.org/mesa/mesa/tree/src/glu
libzmq - это своего рода странный случай, поскольку низкоуровневый API C был первоначально предназначен для того, чтобы выглядеть как сокеты POSIX, и абсолютно не объектно-ориентированный (мы сделали его более последовательным и организованным с течением времени). Между тем фактическая библиотека находится на С++.
Интерфейс С++-to-C находится в libzmq/src/zmq.cpp и состоит из множества простых функций C, которые вызывают "реальный" код на С++.
CZMQ, с другой стороны, стремится к чему-то более стильному, предоставляя простую модель класса с конструкторами, деструкторами, контейнерами, частными свойствами и т.д. Ничто не радикально, а превращает C в гораздо более элегантный язык.
Я не уверен, насколько хорошо подход класса CZMQ будет сопоставляться с С++ API, если этот API явно не предназначен для сопоставления.
Отказ от ответственности: я являюсь автором большинства CZMQ.