Namenskonvention für template-Typen?
Traditionell die Namen der template-Typen sind nur einen einzigen Großbuchstaben.:
template<class A, class B, class C>
class Foo {};
Aber ich zögere, dies zu tun, weil es nicht aussagekräftig und daher schwer zu Lesen. Also, wäre das nicht so etwas wie das besser:
template<class AtomT, class BioT, class ChemT>
class Foo {};
Ich Neige auch zu denken, das folgende wäre keine schlechte Idee:
template<class ATOM, class BIO, class CHEM>
class Foo {};
Es macht Sie abheben können (und auch, es ist den Großbuchstaben wieder). Was ist Ihre Meinung?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Für C++ - templates habe ich ein paar Muster
Wenn es nur ein einzelnes template-parameter, ich nenne es T (oder U,V für verschachtelte Vorlagen).
Wenn es mehrere Parameter und der nutzen ist nicht sofort offensichtlich ist, dann habe ich verwenden Sie aussagekräftige Namen mit einem Präfix T. Zum Beispiel, TKey, TValue, TIdentifiier, etc ... das macht die Parameter relativ leicht zu erkennen im ganzen template-Nutzung.
Ich würde vermeiden, dass die Großbuchstaben-version, obwohl. Die meisten Menschen verwenden Sie GROSSBUCHSTABEN Bezeichner in C/C++ zur Darstellung einer makro-definition. Wiederholen dieses Muster für ein template-parameter ist wahrscheinlich die Leute verwirren, die Straße hinunter.
const TValue& Value() const { return value_;}
Ich benutze übereinkommen TName für die template-parameter und NameT für gespeicherte template-parameter.
In der Regel, die traditionelle Weise ist die Verwendung von T, wenn es nur einen Typ param. Wenn es mehr ist, verwenden Sie T als Präfix hat, er z.B. TAtom. "T" - Präfix hilft, um sofort zu sehen, es ist Typ-parameter. Mit TAtom für ein einzelnes Typ-parameter ist ebenfalls gültig.
Sollten Sie nicht verwenden eine spezielle Namenskonvention für Vorlagen, benutzen Sie einfach die gleiche Konvention wie für alle anderen dieser Art (wie für Klassen oder Variablen). Es sollte keine Rolle spielen, in den code, ob Sie arbeiten mit template-Typen/Werte oder normale.
template <typename FooT> ... { typedef FooT Foo; };
, so dass, wenn Sie verwenden Sie einfach standard-Konvention, können die Namen der clashmName
oderm_name
für die Mitglieder, dieszName
im ungarischen Stil, etc. - wenn es gibt Konventionen für Instanzen und Argumente, um Sie zu unterstützen, ich sehe nicht, warum diese Argumente würden nicht verlängern zu Vorlagen. Wenn eine Art oder den Typ einer Instanz ist grundsätzlich anders, ich sagen, Sie sollten verwenden, die Konventionen für beide, oder keine. (Meta-Konventionen für metaprogramming!)Foo_t<T>
würdeFoo(T) -> Foo_t<T>
(wenn nicht explizit gefordert, sondern abgeleitet über ADL/SFINAE, das Präfix oder suffix weggelassen wird; dann durch EingabeFoo_t
Sie wissen, müssen Sie die template-Argumente statt um herauszufinden, Wann der compiler drosseln) -- sehen Sie, wie SO viele Fragen, die Sie finden können Fragen, warum brauchen wirmake_tuple
/make_pair
!Ich versuche zu Folgen, die Vorstellung mein compiler Verkäufer verwendet: es ist nicht zu kurz und nicht zu ausführlich. Und mir hilft Lesen Sie die Fehlermeldungen, die ich durch standard-templates. (Das ist ein weiterer Grund, warum ich wechselte von
const T&
zuT const&
). So etwas wie:wo mein compiler verwenden in der Regel:
can-come-back-and-bite-you-later
Punkt._Ty
so nicht zu Schritt auf die Benutzer, dieT
. Kritisiert nicht Ihre Gründe, aber es ist ein wenig komisch, dass Sie erzeugt, was Sie versuchten zu vermeiden. 🙂In unserem shop, verwenden wir HungF##ngarian notation. Template-Argumente sind nur Argumente wie alle anderen, außer Sie sind nicht const, noch eine variable, sondern ein Typ.
Das Präfix beschreibt die Art, während der name soll sagen, etwas von der Rolle, die das argument spielt im Rahmen der definierten Funktion.
Wenn ich die Klasse mit einem parameter " Typ " ich bin mit dem Namen T. Auch bedeuten, dass alle operartion in dieser Klasse sind in Zusammenarbeit mit T.
Wenn ich paar parameter, ich bin Benennung wie in Ihrer explamle AtomT, BioT...
Wenn die template-parameter ist nicht vom Typ des Objekts, mit denen wir arbeiten, in clas z.B. Strategie, comaparator oder Funktor, ich bin mit Namen ohne T z.B. ThreadStrategy, zu Vergleichen.
Manchmal vermeiden, mischen die Stile mache ich Typdefinitionen in der Klasse:
typedef T value_type;
--
Boost naming convention (http://www.boost.org/development/requirements.html#Naming_consistency) sagt über template-Parameter weiter:
Template-parameter-Namen beginnen mit einem Großbuchstaben.
Ich Folgen den gleichen Allgemeinen Konventionen Benennung der template-parameter typenames als ich befolgen, benennen von Klassen & Strukturen, die Großschreibung des ersten Buchstaben oder jedes Wort, etwa so: