Jeśli wolno mi wykonywać następujące czynności:
template <typename T = int>
class Foo{
};
Dlaczego w zasadzie nie wolno mi wykonywać następujących czynności?
Foo me;
Ale muszę określić co następuje:
Foo<int> me;
C ++ 11 wprowadził domyślne argumenty szablonów i obecnie są one nieuchwytne dla mojego pełnego zrozumienia.
Foo
może być identyfikatorem szablon lub może być jawne instancji w zależności od tego, czy istnieje domyślny argument. Lepiej zachowaj jawną składnię tworzenia instancji. Pomyśl o tym jak o funkcjifoo
z jednym domyślnym parametrem. Nie możesz tego takfoo
nazwać, nazywasz tofoo()
. Zachowanie tej spójności ma sens.foo
obie; możesz nazwać klasę bez argumentów, jakFoo
jednak.<>
nie jest już potrzebne w tym przypadku. Sprawdź moją odpowiedź, aby uzyskać więcej informacji.Z C ++ 17 rzeczywiście możesz.
Ta funkcja nosi nazwę dedukcji argumentów z szablonu klasy i zapewnia większą elastyczność w sposobie deklarowania zmiennych typu szablonowego .
Więc,
jest teraz legalnym kodem C ++ .
źródło
Nie możesz tego zrobić, ale możesz to zrobić
a potem zrób
źródło
typedef Foo<float> Fooo;
bez typu domyślnego?using Fooo = Foo<>;
Możesz użyć następujących:
I
int
niech to będzie twój argument szablonowy. Wsporniki kątowe są konieczne i nie można ich pominąć.źródło