2016-04-18 9 views
0

meine Frage kann für viele von euch seltsam aussehen und es tut mir wirklich leid. Standard Template Parameter Syntax

Wie ich mich erinnern kann, habe ich vor einigen Jahren gelungen, eine Klasse mit einem Standard-Template-Parameter zu definieren, so dass die Syntax

Foo<> f; 

kann jedoch durch

Foo f; 

ersetzt werden, kann ich mich nicht erinnern, wie ich das gemacht habe. Ich dachte, Foo-Klasse wurde mit variadischen Vorlagen definiert und der Standard-Template-Parameter war ein ganzzahliger Wert (SIZE), aber ich vermag es nicht, die Ziel-Syntax zu reproduzieren.

Weiß jemand, wie man das macht? Wenn es nur ein Traum war, tut es mir wirklich leid!

EDIT: gut, soweit ich mich erinnern kann, die Basis des Trick

template<int SIZE=0> 
class Foo; 

mit einigen variadische Vorlagen neu zu definieren war. Aber ich bin mir bewusst, dass meine Frage fremd ist und dass es wahrscheinlich unmöglich ist, eine solche Syntax zu erhalten ... :)

+5

Die Phrase 'Wenn es nur ein Traum ....' nur mein Tag :) (Sie weitem nicht die einzige Person sind, auf dieser Seite, die in Code träumt) –

+2

Vielleicht haben Sie an eine Funktionsvorlage gedacht? –

+0

Sprechen Sie über Syntax in der Vorlagendefinition oder etwas? In diesem Fall wäre es hilfreich, wenn Sie ein kleines Beispiel für die Vorlage angeben, die Sie definieren. – kfsone

Antwort

1

Sie wollen wahrscheinlich etwas wie

template<size_t SIZE = 0> 
struct Foo { 
    // ... 
}; 

Siehe Demo


Reduzieren, dass zu

Foo f; 

ist nicht möglich, obwohl.

+0

Sicher, das weiß ich! Ich glaube, ich habe es geschafft, einen Trick zu finden, um es mit variantenreichen Vorlagen zu ermöglichen, aber ich weiß, dass es verdächtig ist ... :) – Aleph

1

Eine nette Lösung wäre, einen Alias ​​für Ihren Typ zu definieren.

template<std::size_t size = 0> 
struct Foo { 
    // ... 
}; 

using DefaultFoo = Foo<>; 

Sie können allerdings nicht den gleichen Namen haben ...

Verwandte Themen