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
Respuesta
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.
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.
+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) –
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.
- 1. compatibilidad del compilador para asignadores con estado en contenedores STL
- 2. const y STL contenedores
- 3. Búsqueda binaria C++ STL
- 4. Inspeccionando contenedores STL en XCode
- 5. Contenedores OpenCV, Matlab y STL
- 6. Estructuras de datos equivalentes de contenedores STL
- 7. ¿Transferir la propiedad dentro de contenedores STL?
- 8. STL asignación de contenedores y punteros const
- 9. Depuración de contenedores C++ STL en Windbg
- 10. iteración de contenedores STL encapsulados encapsulados
- 11. compatibilidad binaria entre las distribuciones de Linux
- 12. ¿Cómo copian los objetos STL los contenedores?
- 13. Encabezados hacia adelante para contenedores STL
- 14. lambda + for_each + eliminar en contenedores STL
- 15. const y no const en contenedores STL
- 16. ¿Cómo se implementa end() en contenedores STL?
- 17. Métodos refactorizados y compatibilidad binaria en Java
- 18. ¿Cómo probar la compatibilidad binaria automáticamente?
- 19. Inspeccionar contenedores STL en la depuración de Visual Studio
- 20. ¿Hay algún riesgo real derivado de los contenedores C++ STL?
- 21. Especificidad de destino de GCC y compatibilidad binaria
- 22. ¿Por qué se prefieren los contenedores STL a los contenedores MFC?
- 23. ¿La adición de valores enum rompe la compatibilidad binaria?
- 24. Java: compatibilidad binaria de clases y subclases abstractas
- 25. contenedores STL en la pila y el montón
- 26. Puede terminar() ser una operación costosa para contenedores STL
- 27. Contenedores STL: diferencia entre vector, lista y deque
- 28. Función Hash genérica para todos los contenedores STL
- 29. ¿Cómo uso contenedores C++ STL en la aplicación My iPhone?
- 30. Asignación entre los contenedores stl C++ y C#
Ni siquiera puede esperar compatibilidad binaria en la misma versión de STL con diferentes indicadores de compilación. –