Mam taki szablon klasy
template<template <typename T> class X, typename U>
class kaka
{
private:
template <typename any>
class test
{
private:
any *x;
public:
test() {};
test(int rozmiar) { x = new any [rozmiar]; };
~test() { delete [] x; };
any & operator[](int i) { return x[i]; };
};
test<U> zm1;
X<U> zm2;
int m_rozmiar_array;
int m_rozmiar_valarray;
public:
kaka();
kaka(int rozmiar_array, int rozmiar_valarray) : zm1(rozmiar_array), zm2(rozmiar_valarray) { m_rozmiar_array = rozmiar_array; m_rozmiar_valarray = rozmiar_valarray; };
void show(void);
void wypelnij(U zmienna);
};
następnie szablon który dziedziczy po tym szablonie oraz prube przeciążenia operatora <<.
template <typename any, template <typename T> class X, typename U>
class bigos{};
template <typename any>
ostream & operator<<(ostream & os, bigos<typename any, template <typename T> class X, typename U> & x);
template <typename any, template <typename T> class X, typename U>
class bigos : public kaka<X, U>
{
private:
any zmienna1;
public:
bigos() {};
bigos(any zm, int array, int val_array) : kaka<X, U>(array, val_array) { zmienna1 = zm;} ;
friend template <typename any> ostream & operator<< <>(ostream & os, bigos<typename any, template <typename T> class X, typename U> & x);
};
i teraz tak szablon bigos ponieważ dziedziczy po kaka musi wywołać konstruktor szablonu kaka. ale dlaczego musiałem napisać kaka<X, U> a nie samo kaka.
oraz dlaczego przeciężonie operatora << skarzy się że muszę podać 3 argumenty template i że daje jeden a przecież dałem 3