W C++ wszystkie argumenty typu musi mieć nazwę, czy go używać, czy nie, więc nie ma znaku zapytania. Po prostu ustaw jako argument szablonu funkcję i nadaj jej nazwę, a powinieneś mieć się dobrze.
template <typename T>
struct templ {
template <typename U>
void assign(templ<U> & u); // public void assign<?>(temple<U> u)
};
To trywialne część, tym bardziej skomplikowana część jest egzekwowanie ograniczeń dotyczących rodzaju, a do tego można użyć SFINAE:
template <typename T>
struct templ {
template <typename U, typename _ = std::enable_if<
typename std::is_base_of<U,T>::value
>::type >
void super(templ<U> & u); // public void super_<? super T>(templ<?> u)
template <typename U, typename _ = std::enable_if<
typename std::is_base_of<T,U>::value
>::type >
void extends(templ<U> & u); // public void extends_<? extends T>(templ<?> u)
}
To jest za pomocą C++ 11 do SFINAE, w C++ 03, jest nieco bardziej skomplikowany (jak gdyby ta wersja była prosta), ponieważ nie można używać SFINAE w argumencie szablonu funkcji, więc SFINAE musi być zastosowana do argumentów typu powrotu lub funkcji dodatkowej. SFINAE jest znacznie potężniejszym rozwiązaniem, może być używane nie tylko do zapewnienia super
i extends
, ale także wielu innych funkcji typów lub wartości czasu kompilacji. Google dla SFINAE, a znajdziesz wiele przypadków użycia SFINAE, wiele z nich będzie w stylu C++ 03.
Pojawiła się propozycja dla koncepcji, które znacznie uprościłyby składnię, ale nie osiągnięto porozumienia i w ruchu, aby przesunąć standard do końca, został on odłożony na późniejszy standard.
To naprawdę nie jest tak powszechne w C++, jak to jest w Javie, więc zalecam, aby podać inne pytanie z tym, co chcesz zrobić, a otrzymasz pomysły na projekty w bardziej idiomatycznym C++.
A szablony C++ nie są nawet trochę podobne do Java Generics. Szablony C++ tworzą nowe typy; Java Generics ogranicza istniejące typy. Szablony C++ to w zasadzie preproces z niektórymi zaimplementowanymi regułami; Java Generics jest zbudowany na teorii typów. Nie daj się uwieść stwierdzeniu, że są blisko odpowiednikami. Nie są. – EJP
Joshua Bloch stwierdza w różnych filmach, że nie należy używać symboli wieloznacznych w przypadku typów zwrotu. Czy jesteś pewien, że są dobrym pomysłem w twoim przypadku? Czy możesz opublikować funkcję lub przynajmniej jej podpis? – fredoverflow
proszę, czy mógłbyś dodać funkcję? –