2012-09-08 14 views
7

Un cliente mío quiere que haga un servidor fiable y de alto rendimiento que reciba flujos de datos a través de sockets. Espera que esté en C++¿Es bueno para boost asio y C++ 11?

Hacía tiempo que estaba haciendo C++ a tiempo completo, así que he estado leyendo un poco. Asio parece ser una buena apuesta para la creación de redes en C++, y C++ 11 parece una gran nueva versión de C++ con muchas características nuevas.

Mi pregunta: ¿es posible usar ambos de manera confiable? ¿Tiene sentido? ¿Debería evitar ciertas características de C++ 11 como lambdas?

Respuesta

6

Me basaría en "características de C++ 11 para evitar" principalmente en su (s) compilador (es) de destino planificado. No veo ninguna razón para evitar lambdas: todos los compiladores principales ya los admiten, y proporcionan una mejora sustancial en la legibilidad.

Por otro lado, dependiendo de los compiladores que le interesan, es posible que desee/necesite evitar cosas como plantillas variadic y/o listas de inicializadores preparados.

+0

Otra cosa a tener en cuenta es el soporte para regex, la biblioteca provista con p. Ej. GCC 4.7 parece estar completo, pero algunas cosas como 'regex_search' no funcionan. –

+0

@jerrycoffin compilador de gcc sería mi mejor apuesta ¿verdad? (Desarrollaré en mac y apuntaré a unix no determinado (hasta el momento) caja de Unix). ¿O es clang una opción viable todavía? Lo he usado en el desarrollo de iphone xcode y es difícil no entusiasmarme con su analizador estático – Toad

+0

@Toad: gcc ciertamente es compatible con más plataformas. En este momento, Clang está bien en OS/X, semi-razonable en Linux, inutilizable en Windows, y no ha sido portado a la mayoría de las otras plataformas. –

6

Puede usar los dos juntos sin problemas. Para las cosas implementadas tanto en Boost como en C++ 11 STL, es su elección la que debe usar. En la mayoría de los casos, hace muy poca diferencia. Si usa Boost, también será portátil para las plataformas C++ 03 (al menos, esa parte de su código será si no usa las características de C++ 11 directamente).

Boost fue cuidadosamente diseñado para poder aprovechar las características de C++ 11 donde están disponibles sin tener que proporcionar una interfaz "estúpida" o un rendimiento deficiente para admitir donde no están.

Y si necesita buenas E/S asíncronas, necesita alguna biblioteca para proporcionarlas. Boost es bastante difícil de superar, ya sea que uses C++ 11 o no.

Si su pregunta es "¿Hay alguna razón específica por la que no quisiera usar Boost con C++ 11 o C++ 11 con Boost", la respuesta es no. Si necesita alguna característica que Boost proporciona, como asio, y solo necesita compatibilidad con plataformas C++ 11, entonces son una combinación perfecta para su aplicación.

+0

gran visión. ¡Muchas gracias! – Toad

5

See, boost.asio es la biblioteca de red para programación dirigida por eventos: muchas llamadas de retorno, C++ 11 lambda hace que las devoluciones de llamadas de escritura sean muy sencillas.

Básicamente combinación de C++ 11 y Asio hace que sea mucho más fácil de desarrollar y haría su código mucho más limpio y fácil de leer

+2

Las lambdas también son más rápidas que las devoluciones de llamadas mediante bind y, desde luego, son más sencillas que escribir functors personalizados para todo – ltjax

2

El asio documentation menciona específicamente C++ 11

apoyo
+0

buen punto. No estaba tan lejos leyendo los documentos todavía. – Toad