2011-11-04 12 views
12

Estoy en el proceso de escribir una interfaz C para una biblioteca C++, y estoy buscando algunos ejemplos de alta calidad (o mejores prácticas).Ejemplos de interfaces C para bibliotecas C++?

Hasta ahora éste parece bastante prometedora: http://czmq.zeromq.org/manual:czmq

¿Alguna otra sugerencia?

+0

sólo iba a recomendar ZeroMQ, contento de haber leído la pregunta a través :) –

+0

duplicado posible: http://stackoverflow.com/q/7953559/440558 –

+0

Definitivamente no es un duplicado de esa pregunta. Esta pregunta requiere ejemplos de cómo hacerlo bien (es decir, cómo diseñar la API C basada en una API C++). Esa otra pregunta solo está interesada en la mecánica básica de hacerlo en absoluto. –

Respuesta

0

Si su biblioteca C++ está escrita como COM en Windows. Hay herramientas para generar automáticamente la interfaz C para él.

1

Puede consultar el Parma Polyhedra Library como un ejemplo de excelente interfaz C para una biblioteca C++ bien escrita. PPL es un software libre GPL-ed, notablemente utilizado dentro del compilador GCC.

0

Puedo sugerir FTGL que es una biblioteca C++ que proporciona una interfaz C. He aquí dos ejemplos de programas que logran exactamente lo mismo:

Nótese también que FTGL utiliza el pImpl paradigm con el fin de lograr la compatibilidad binaria entre las distintas versiones. Ver here por qué es bueno.

Descargo de responsabilidad: Soy un contribuidor FTGL.

0

libzmq es un tipo de caso raro ya que la API de bajo nivel C fue originalmente concebido para parecerse a los zócalos POSIX, y absolutamente no orientado a objetos (lo hicimos más consistente y organizado en el tiempo). Mientras tanto, la biblioteca real está en C++.

La interfaz C++ - to-C está en libzmq/src/zmq.cpp, y consiste en un grupo de funciones C simples que llaman al código C++ "real".

CZMQ por otro lado tiene como objetivo algo más elegante, proporcionando un modelo de clase simple con constructores, destructores, contenedores, propiedades privadas, etc. Nada radical pero convierte a C en un lenguaje mucho más elegante.

No estoy seguro de qué tan bien el enfoque de la clase CZMQ se correlacionaría con una API de C++, a menos que esa API se haya diseñado explícitamente para ser mapeada.

Descargo de responsabilidad: soy el autor de la mayoría de CZMQ.