2010-02-26 14 views
9

Hinweis: Als Community-Wiki gekennzeichnet.Basic C++ Idioms/Techniken

In den letzten Tagen habe ich realisiert, wie wenig ich über C++ weiß.

Zudem:

  • mit der STL
  • Umsetzung RAII
  • Implementierung ref gezählt Smart Pointer
  • meine eigene Policy-basierte Template-Klassen schreiben
  • Überlastung Betreiber < < for fun

Welche anderen Techniken müssen für einen guten C++ - Programmierer unbedingt erforderlich sein?

Danke!

+1

@anon Implementieren RAII, sicherlich. Referenzzähler implementieren? Ich hoffe, die bereits vorhandenen Implementierungen reichen aus, um das zu verhindern. –

Antwort

4

ich denke, das sollte es abdecken:

More C++ Idioms - Wikibooks

+0

Ja, das C++ - Idiom deckt viele Idiome ab, die C++ - Ingenieure kennen sollten, wie PImpl, RAII, CRTP, Kopieren und Tauschen. – baotiao

4
  • OO-Design
  • Arten Ausnahme Sicherheitsgarantien (das ist, was die meisten Design Patterns/Idiome auf basieren).
  • Wenn auf die Container-Standard verwendet
  • Boost-
+0

Es scheint, C++ hat sich in den letzten Jahren in verschiedener Hinsicht vom OO-Design entfernt ... – einpoklum

0

(kaum ein Must-Know, aber immer noch nützlich) Schreibdomänenspezifische Sprachen mit Überladen von Operatoren und Metaprogrammierung (siehe Boost.Spirit für ein schönes Beispiel) - aber das ist die Art von Dingen, die es leicht machen, sich selbst in den Fuß zu schießen.

2

Die ersten beiden sind "müssen" für einen guten C++ - Programmierer kennen. "Gute C++ - Programmierer" überlasten die Betreiber nicht zum Spaß.

1

Basic:

  • RTTI
  • Virtuelle Funktionen
  • Shared_ptr etc
  • Vorlagen
  • Virtu al vererben
  • Variadische Makros

Ebenfalls nützlich:

  • Attribute (es auf Ihrem Compiler abhängt)
  • Variadische Vorlagen
  • Variadische Funktionen
  • constexpr (in der Kompilierung Sortieranlagen/Hash von Strings usw. berechnen ...aber diese ist mit dem letzten Abschnitt bezogen)
  • Lambdas

Nützlich für brainfucking oder in besonderen Fällen:

  • CRTP
  • SFINAE
  • inable_if (Typ Züge)
  • Foreach-Makro
  • Benutzerdefinierte Literale
0

Die Art, wie ich mein C++ verbessert habe, ist das Lesen des Quellcodes von leveldb. Weil leveldb ein Product Level Code ist. So können Sie das cpp-Idiom und das Entwurfsmuster von einem realen Produkt lernen. Lassen Sie mich Ihnen ein Beispiel zeigen

Leveldb verwenden Sie die Pimpl-Idiom, fast in seiner gesamten Kopf-Datei, wie table.h table_build.h write_batch.h. Sie können aus dem Code direkt

LevelDB viel OO-Entwurfsmuster, wie Build-Muster verwenden lernen, die Tabelle die table_build Klasse hat die Tabelle zu bauen, hat der Block die block_build Klasse den Block

LevelDB auch zu bauen Verwenden Sie das Iterator-Muster, der Iterator macht leveldb praktischer.

Also ich denke leveldb enthalten viele Idiom oder Design-Muster, die C++ Ingenieur wissen sollte.