Problem z szablonami

Odpowiedz Nowy wątek
2011-08-01 11:25
DRK
0

Dany jest szablon ogólny funkcji

template <typename Typ>
void foo(void)
{
    cout << "Szablon ogólny - Typ: " << typeid(Typ).name() << endl;
}

i specyficzny dla typu char

template <>
void foo<char>(void)
{
    cout << "Typ: char" << endl;
}

Dlaczego wywołanie

foo<float>();

powoduje wyświetlenie Typ: char ?

edytowany 1x, ostatnio: DRK, 2011-08-01 11:27

Pozostało 580 znaków

2011-08-01 11:37
0
  1. daj cały, dający się wykonać program, a nie trzy fragmenty
  2. u mnie wyświetla Typ: f, co też jest dziwne (dlaczego nie "float"?)
Bo typename jest zależne od kompilatora i widać w twoim jest tylko f. - hauleth 2011-08-01 11:41
domyśliłem się (dla int wyświetla tylko "i") ale na pewno nie wyświetla "Typ: char" dla floata. - Azarien 2011-08-01 12:59

Pozostało 580 znaków

2011-08-01 12:50
DRK
0
Azarien napisał(a)
  1. daj cały, dający się wykonać program, a nie trzy fragmenty
#include <iostream>
 
using namespace std;
 
template <typename Typ>
void foo(void)
{
    cout << "Szablon ogólny - Typ: " << typeid(Typ).name() << endl;
}
 
template <>
void foo<char>(void)
{
    cout << "Typ: char" << endl;
}
 
int main(int argc, char **argv)
{
    foo<float>();
    return 0;
}
brakuje #include <typeinfo> - Azarien 2011-08-01 16:39

Pozostało 580 znaków

2011-08-01 16:06
0

W czym kompilujesz? Na ideone (które używa gcc) wynik jest taki, jak u Azariena.

Pozostało 580 znaków

2011-08-01 16:10
0

cl z Visual Studio 2010 EE też zwraca poprawnie (a nawet całą nazwę float wypisuje).

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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