Bardzo często w C++ klasy definicji, zwłaszcza w bibliotekach klasy cecha itp zobaczyć kod podobny do poniższego fragmentu:Dlaczego typy szablonów typename nie są domyślnie rozpoznawane jako typy?
template <typename Bar, typename Baz>
class Foo {
using bar_type = Bar;
using baz_type = Baz;
// ... etc.
}
I tylko z tych linii można później odnieść do Foo<A,B>::bar_type
lub Foo<C,D>:baz_type
. Zastanawiam się: dlaczego standard językowy nie wymaga, aby kompilator automatycznie definiował typy przy użyciu parametrów szablonów typename, to znaczy pozwalał na usunięcie dwóch linii przy użyciu i rozpoznawanie Foo<A,B>::Bar
jako A
i Foo<C,D>::Baz
jako D
?
To nie powinno nawet złamać istniejącego kodu, ponieważ w Foo, bar identyfikatorów i Baz są już i tak zabrane.
Ponieważ mogą nie być typami. Np. Mogą być wartością, np. N w szablonie struct array' –
davidbak
Nie zawsze są potrzebne, a ich ujawnienie oznacza, że kod klienta może się z nimi połączyć (zakładając, że oznaczało, że te aliasy mają być jawne.) – juanchopanza
Kolejna odpowiedź: ponieważ jest to łatwe do zrobienia. Jaka była odpowiedź, gdy ktoś zapytał, dlaczego nie ma słowa kluczowego "super" w C++ (ale nie mam do tego odniesienia). – davidbak