2009-08-18 16 views
11

Mam funkcji szablonu:Funkcja szablon specjalizacji w odniesieniu do wskaźnika

template<typename T> 
void foo(const T& value) { bar(value); x = -1; } 

chcę specjalizują się go do zestawu typów:

template<> 
void foo<char>(const char& value) { bar(value); x = 0; } 
template<> 
void foo<unsigned char>(const unsigned char& value) { bar(value); x = 1; } 

To działa OK. Kiedy mogę skompilować to:

template<> 
void foo<char*>(const char*& value) { bar(value); x = 2; } 

pojawia się błąd:

error C2912: explicit specialization; 'void foo(const char *&)' is not a specialization of a function template 

Czy to możliwe, aby specjalizować się typ parametru char* wskaźnik bez typedef'ing go?

Odpowiedz

20

Pewnie. Spróbuj tego:

template<> 
void foo<char*>(char* const& value) {...} 

To dlatego const char* oznacza wskaźnik const char, a nie const wskaźnik do char.

+0

Możesz to zrobić, prawda? 'szablon <> void (wartość const char * const &) foo {...}' Takie podejście działa na mnie, choć nie jestem znalezienie konieczne do określenia '' po 'foo'. – Alan

3

Powinieneś zasadniczo unikać specjalizacji szablonów funkcji: będziesz miał znacznie mniej problemów, jeśli zamiast tego będziesz stosować przeciążenia bez szablonów. Przeczytaj więcej: Why Not Specialize Function Templates?

+0

Tak, przeprojektowany, aby użyć przeciążenia po jego samodzielnym wykonaniu. – pingw33n

Powiązane problemy