Konkretyzacja szablonów

Konkretyzacja szablonów
NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 30
0

Witam. Jakie typy danych w podanym szablonie dopuści kompilator i dlaczego?

Kopiuj
 #include <iostream>

class X {};
class Y : public X {};

template<class T>
class A {
public:
   A() {}
public:
   virtual T b(T x) = 0;
};

template<class T>
class B : public A<T> {
public:
   X b(T x) { return x; };
};

int main(void) {
   B<???> x;
   x.b(/*co tutaj?*/);
   return 0;
}
Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Kompilator dopuści typy dla których zachodzi niejawna konwersja T -> X

NI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 30
0

a tak dokładniej?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

? Typy zwracane z funkcji muszą być kowariantne. To znaczy że typ zwracany musi być taki sam lub bardziej szczegółowy od deklarowanego typu zwracanego.
Jesli deklaracja funkcji mówi ze zwracamy obiekty Animal to mozemy zwracać Cat i Dog, ale jeśli deklaracja mówi że zwracamy Mammal to nie możemy zwrócić Animal.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.