Wenn ich Folgendes tun darf:
template <typename T = int>
class Foo{
};
Warum darf ich hauptsächlich nicht folgendes tun?
Foo me;
Aber ich muss folgendes angeben:
Foo<int> me;
In C ++ 11 wurden Standardvorlagenargumente eingeführt, die meines Erachtens derzeit nur schwer zu verstehen sind.
Foo
vielleicht eine Vorlage Bezeichner sein oder könnte eine explizite Instanziierung in Abhängigkeit davon, ob ein Standardargument gibt. Behalten Sie besser die explizite Instanziierungssyntax bei. Stellen Sie sich das wie eine Funktionfoo
mit einem einzigen Standardparameter vor. Sie können es nicht so nennenfoo
, Sie nennen es mitfoo()
. Es ist sinnvoll, dies konsistent zu halten.foo
. Sie können jedoch eine Klasse ohne Argumente benennenFoo
.<>
ist dies in diesem Fall nicht mehr erforderlich. Schauen Sie sich meine Antwort für weitere Details an.Mit C ++ 17 können Sie in der Tat.
Diese Funktion wird als Ableitung von Klassenvorlagenargumenten bezeichnet und bietet mehr Flexibilität bei der Deklaration von Variablen mit Vorlagentypen .
So,
ist jetzt legaler C ++ - Code .
quelle
Das darfst du nicht, aber das kannst du
und dann tun
quelle
typedef Foo<float> Fooo;
ohne Standardtyp?using Fooo = Foo<>;
Sie können Folgendes verwenden:
Und
int
sei dein Vorlagenargument. Die eckigen Klammern sind notwendig und können nicht weggelassen werden.quelle