W jaki sposob moge zainicjalizowac zmienna statyczna w szablonie dla
konkretnego typu. Ponizszy program inicjalizuje zmienna st jako 'a'
dla
wszystkich typow.
Dzieki za pomoc
#include <iostream>
using namespace std;
template <class T>
class Container
{
public:
static T st;
};
template <class T>
int Container<int>::st = 81;
template <class T>
char Container<char>::st = 'a'; // chyba ostatnia inicjalizacja jest
brana pod uwage
int main ( void )
{
Container<int> i1;
Container<int> i2;
Container<char> c;
cout << "i1.st: " << dec << i1.st << endl; // 'a' - ma byc 81
cout << "i2.st: " << dec << i2.st << endl; // 'a' - ma byc 81
cout << "c.st: " << dec << c.st << endl; // 'a' - ok
return 0;
}
>W jaki sposob moge zainicjalizowac zmienna statyczna w szablonie dla
>konkretnego typu. Ponizszy program inicjalizuje zmienna st jako 'a'
>dla
>wszystkich typow.
Specjalizacja jesli sie nie myle.
template <char>
char Container<>::st = 'a';
milego dnia, hej
dzieki za pomoc
niestety to rowniez, nie dziala :(
efekt taki sam jak pierwotnie
> dzieki za pomoc
> niestety to rowniez, nie dziala :(
> efekt taki sam jak pierwotnie
Wpisz
template <>
char Container<char>::st = 'a';
do pliku .cpp (a nie .h).
RW
wielki dziex
teraz poszlo :)
A rozumiesz, dlaczego?
RW
Dla scislosci, bledny kod (bledna inicjalizacja):
template <class T>
char Container<char>::st = 'a';
lub
template <char>
char Container<char>::st = 'a';
Prawidlowy kod:
template <>
char Container<char>::st = 'a';
To ze "template <class T>" powodowalo inicjalizowanie rowniez
pozostalych zmiennych moglbym wytlumaczyc jako dopasowanie pozostalych
typow do "class T".
Jednak chyba nie dokonca jestem swiadom dlaczego tak samo zle dziala
"template <char>".
"template <char>" ma tyle samo sensu, co "double funkcja(double 1.34)
{ return 0.45 }"
RW