Mam funkcję szablonu "porównaj" zdefiniowaną poniżej.Błąd instancji szablonu
#include<iostream>
using namespace std;
template<typename T>
void compare(const T&a, const T& b)
{
cout<<"Inside compare"<<endl;
}
main()
{
compare("aa","bb");
compare("aa","bbbb");
}
Kiedy używam instancji porównawczej z literałami ciągów o tej samej długości, kompilator nie narzeka. Kiedy robię to z literałami o różnej długości, mówi "błąd: brak funkcji dopasowującej dla połączenia do porównania (const char [3], const char [5])"
Jestem zdezorientowany, ponieważ funkcja porównywania powinna być tworzona z wskaźnik znaku zamiast tablicy znaków . Czy ciągi literałów nie powinny zawsze zanikać do wskaźnika?
@Greg, na czym polega problem z bieżącym deklaracji? – chappar
Twoja deklaracja w formie pisemnej wymaga, aby porównanie funkcji miało dwa parametry dokładnie tego samego typu. "const char [3]" i "const char [5]" nie są tego samego typu. –
W twoim istniejącym kodzie, "porównywanie" będzie porównywane z czymś podobnym do void compare (char a [2], char b [4]). Używanie wskaźników zamiast odwołań oznacza, że T można bezpiecznie ocenić jako "znak", zamiast dwóch macierzy o różnych rozmiarach (które są różnymi typami). – Justicle