Konkretyzacja szablonów

0

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

 #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;
}
0

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

0

a tak dokładniej?

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.

1 użytkowników online, w tym zalogowanych: 0, gości: 1