2011-04-20 6 views
5

Digamos que escribo una DLL en C++ y me gustaría exportar un método que toma un parámetro std :: vector. ¿Puedo esperar alguna compatibilidad binaria entre las diferentes versiones de STL?Compatibilidad binaria de contenedores STL

+5

Ni siquiera puede esperar compatibilidad binaria en la misma versión de STL con diferentes indicadores de compilación. –

Respuesta

3

Si quiere decir entre las versiones incluidas con las versiones actualizadas del mismo compilador, sí, puede (y funcionará) en algunos casos, pero debe tener cuidado. También hay algunos casos especiales, como los compiladores Intel y Microsoft en Windows: Intel tiene mucho cuidado en mantener la compatibilidad binaria, y al menos cuando lo he probado, siempre ha funcionado bastante bien.

Para la mayoría de los otros casos, la respuesta es no.

6

No tengo conocimiento de ninguna garantía de compatibilidad entre versiones, ni siquiera entre versiones y depuración en el mismo compilador.

Una solución es crear un contenedor para el vector. Cree una clase que tenga todas las funciones que necesita del contenedor e impleméntelas en términos de operaciones en el vector privado, que es el único miembro de la clase. Mantenga todo el código de clase en la DLL.

+0

+1 - pero eso aún no significa que será portátil. Cosas como el esquema de manejo de excepciones pueden cambiar entre las versiones del compilador o los del compilador también, y usted no tiene control sobre esas cosas. En general, si quieres compatibilidad binaria, entonces necesitas usar una interfaz C. (Por ejemplo, en MSVC++ los modificadores '/ SAFESEH' y'/Eh' cambian el modelo de excepción de nivel binario, y creo que al menos '/ GS' también lo hace) –

4

Absolutamente no! Ni siquiera puede confiar en que la misma versión de STL sea compatible si se compiló con una versión diferente del mismo compilador.

Cuestiones relacionadas