2010-02-26 9 views
9

Nota: marcado como wiki de la comunidad.Basic C++ Modismos/Técnicas

En los últimos días, me he dado cuenta de lo poco que sé sobre C++.

Además:

  • usando el TEL
  • implementar RAII
  • implementar punteros inteligentes ref-contado
  • escribir mis propias clases de plantilla basada en políticas
  • operadores sobrecarga < < por diversión

¿Qué otras técnicas son imprescindibles para un buen programador de C++?

Gracias!

+1

@anon Implementación de RAII, sin duda. ¿Implementando punteros inteligentes ref-contados? Espero que las implementaciones que ya existen sean suficientes para evitar la necesidad de eso. –

Respuesta

4

creo que esto debería cubrirlo:

More C++ Idioms - Wikibooks

+0

Sí, The C++ Idiom cubre muchos modismos que el ingeniero de C++ debe saber, como PImpl, RAII, CRTP, copy y swap. – baotiao

4
  • OO Diseño
  • Tipos de garantías de seguridad excepción (que es lo que la mayoría de los patrones de diseño/expresiones se basan en).
  • Cuándo usar contenedores estándar
  • Boost
+0

Parece que C++ se ha estado alejando del diseño de OO en varios aspectos en los últimos años ... – einpoklum

0

(casi un deber-saber, pero todavía útil) lenguajes específicos de dominio de escritura con la sobrecarga de operadores y metaprogramming plantilla (ver Boost.Spirit para un buen ejemplo) - pero este es el tipo de cosas que también facilitan los disparos en el pie.

2

Los dos primeros son "imprescindibles" para un buen programador de C++. 'Los buenos programadores de C++' no sobrecargan a los operadores por diversión.

1

básica:

  • RTTI
  • funciones virtuales
  • shared_ptr etc
  • plantillas
  • Virtu Al heredar
  • macros variadic

También es útil:

  • atributos (que depende de su compilador)
  • plantillas variadic
  • funciones
  • variadic
  • constexpr (clasificación en tiempo de compilación/cálculo de hash de cadenas, etc ...pero este último está relacionado con la última sección)
  • Lambdas

Útil para brainfucking o en casos especiales:

  • CRTP
  • SFINAE
  • inable_if (rasgos tipo)
  • Foreach macro
  • Literales definidos por el usuario
0

La forma en que solía mejorar mi C++ es leyendo el código fuente de leveldb. Porque leveldb es un código de nivel de producto. Para que pueda aprender la expresión idiomática cpp y el patrón de diseño de un producto real. Permítame mostrarle un ejemplo

Leveldb utiliza la expresión Pimpl, casi en todo su archivo principal, como table.h table_build.h write_batch.h. Puede aprender del código directamente

LevelDB utilizar muchos patrón de diseño orientado a objetos, tales como patrón de acumulación, la mesa tiene la clase table_build para construir la tabla, el bloque tiene la clase block_build para construir el bloque

LevelDB también use el patrón Iterator, el iterador nos hace usar el nivelldb más conveniente.

Así que creo que leveldb contiene muchos modismos idiomáticos o de diseño que el ingeniero de C++ debería saber.