c++ design cplex

c++ - ¿Soy solo yo o podría la API Cplex Concert usar algunas mejoras?



design (1)

Adición: me doy cuenta de que esta publicación parece tomar la forma de una diatriba, pero si puedes corregir cualquier malentendido que tenga, aclarar cualquier cosa, o mejor aún: ayúdame a resolver mi problema con el problema del iterador, ¡estaría muy agradecido! Actualmente estoy usando cplex 9 (sé que no es el último, está fuera de mis manos).

¿Soy solo yo o podría CPLEX Concert API usar alguna mejora? Decir que deja mucho que desear sería ponerlo amablemente en mi opinión actual, ya que parece violar prácticamente todas las prácticas establecidas para el diseño de API de C ++ de calidad que he encontrado.

Notables:

  • métodos de establecimiento de const
  • operador [] que devuelve objetos de identificador de referencia en lugar de referencias
  • no hay iteradores de matriz (aunque los iteradores no son geniales para programación paralela, todavía debería estar disponible para su uso por código menos crítico en mi opinión)
  • extrema hostilidad del desarrollador para los usuarios del STL que desean mezclar los dos (o si no el STL, al menos código que ya es compatible con STL, como Boost).
    • ejemplo: ni un solo typedef en las clases de matriz, ni siquiera (a simple y absoluto) value_type.

Hice una envoltura de matriz, eso fue fácil. Una envoltura de iterador que hice, no tanto. Debido a los dos primeros puntos, el iterador (actualmente) da como resultado un código que se compila cuando no debería. Todavía estoy tratando de encontrar una forma de evitarlo (estoy usando boost.iterator_facade).

No me malinterpreten, entiendo que hay que hacer concesiones al diseñar una API. Es bastante claro para mí que la API fue diseñada para simplificar los manuales (ocultando las consideraciones dependientes del lenguaje del usuario que imagino). Sin embargo, al hacerlo, si bien puede haber simplificado el diseño de la API C ++, ha hecho que escribir códigos sea más complejo y demoroso para compensar lo que actualmente considero errores de diseño.

¡Cuando en Roma, haz como los romanos!

ME ENCANTARÍA escuchar los fundamentos de sus decisiones de diseño con respecto a estos puntos.

Editar: Logré hacer funcionar mi clase Iterator, en el proceso, eliminando tantas fallas de usabilidad y corrección de casos de esquina con respecto al uso a través de iteradores en el diseño de paso de objetos de cplex como pude, a costa de algunos rendimiento (clonación de extraíbles antes de devolverlos desde un const_iterator). dejando (creo) solo el primer defecto notable restante que no puede corregirse sin una capa adicional de indirección alrededor de cada tipo afectado en la api de cplex ... no, gracias, tendré que tener cuidado con la frecuencia de las llamadas cuando desreferenciando const_iterators de tipos derivados de IloExtractable.


No es que esto te sirva de mucho, pero no podía creer las mejoras cuando cambié de CPLEX 9 a 12, funcionó porque 12 es gratis para uso académico.