nestle libreria library drink descargar bebida c++ boost

c++ - libreria - ¿Cuál es el uso típico de impulsar cualquier biblioteca?



descargar boost (6)

¿Cuáles son las ventajas de usar la biblioteca boost.any? ¿Podría por favor darme algunos ejemplos de la vida real? ¿Por qué no se puede lograr la misma funcionalidad teniendo algún tipo genérico en la raíz de la jerarquía del objeto y creando contenedores con ese tipo de base?


¿Por qué no se puede lograr la misma funcionalidad teniendo algún tipo genérico en la raíz de la jerarquía del objeto y creando contenedores con ese tipo de base?

Eso llama a una jerarquía de objetos, una construcción que está inyectando artificialmente en el diseño para resolver un problema periférico. Además, tal construcción es fácil de equivocarse y una implementación incorrecta puede causar estragos. Boost.Any es una alternativa segura, bien probada y revisada por la comunidad.

¿Podría por favor darme algunos ejemplos de la vida real?

TinyJSON utiliza boost.Any .

¿Cuáles son las ventajas de usar la biblioteca boost.any?

Me remito a la documentación introductory .


Considero que Boost.Variant siempre debería preferirse, ya que no es intrusivo y todavía requiere una programación muy estructurada.

Pero supongo que la idea principal detrás de boost.any es proporcionar el equivalente a los tipos de objetos java y c #. ¡Es una manera de decir "sí podemos"! :-)


Cuando me enteré por primera vez de Boost, encontré ddj.com/cpp/184403808 de Herb Sutter y Jim Hyslop en el Dr. Dobbs. Lo encontré útil.


Lo hemos usado en un mapa de propiedades, ( std::map<std::string, boost::any> ), para almacenar dinámicamente muchas cosas en un simple espacio de datos plano.

Principalmente almacenamos objetos o cadenas inteligentes-ptr-to-scriptable, pero algunas entradas donde otros tipos (flotadores, vec3f, matrices y otros objetos no estándar).

Funciona bastante bien para agregar más capacidades dinámicas a c ++, o donde quiera que desee un borrado de tipo para simplemente agregar cualquier tipo de datos a un objeto.


Usamos boost.any como el tipo de portador para un contenedor variadic etiquetado seguro para el tipo. Esto es lo que eso significa:

Tenemos un objeto "balsa", que viaja a través de un conjunto de filtros. Cuando un filtro quiere agregar datos a la balsa, puede hacer algo como esto:

raft.addTaggedData<ETag1>(3.0); raft.addTaggedData<ETag2>("a string")`; std::string str = raft.getTaggedData<ETag2>(); int a = raft.getTaggedData<ETag1>(); // <-- Compile error

Donde ETag1 y ETag2 son miembros de una enumeración, y usamos una plantilla de rasgos para asignar etiquetas a los tipos.

La clase de balsa está usando una list de pair<ETagType, boost::any> como almacén de respaldo. Boost.any nos ahorró el dolor de administrar buffers en bruto para varios tipos.


boost :: any felizmente almacenará ints y float, tipos que claramente no tienen clases base. Un ejemplo de la vida real donde puede usarlo es una máquina virtual para un lenguaje interpretado de alto nivel. Sus objetos de "función" necesitarán una serie de argumentos. Esto se puede implementar fácilmente con un std::list<boost::any> detrás de escena.