Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Dlaczego specialization template nie rozróżnia string od generic?

Ostatnio zmodyfikowano 2019-12-18 22:29
Autor Wiadomość
chce_to_umiec
Temat założony przez niniejszego użytkownika
[C++] Dlaczego specialization template nie rozróżnia string od generic?
» 2019-12-17 23:16:43
Kompilator: MinGW-w64 x86_64-8.1.0-release-posix-seh-rt_v6-rev0

Dlaczego, gdy podaję string dla "funkcji 2" (specialization template dla string), kompilator woli wybrać "funkcję 1" (generic)? Ale gdy już odkomentuję "funkcję 3", jej priorytet jest tak silny jak zwykłego przeciążenia i wtedy kompilator wybiera ją dla string?
C/C++
#include <iostream>

using namespace std;

/* 1 */
template < class T > string test1( T left ) {
    return "1";
}

/* 2 */
template < class T > string test1( string left ) {
    return "2";
}

/* 3 */
//template <> string test1(string left) {
// return "3";
//}

int main() {
    string text = "terminal";
   
    cout << test1( 123 ) << endl;
    cout << test1( text ) << endl;
   
    return 0;
}

Wynik:
C/C++
1
1
P-175816
darko202
» 2019-12-18 14:41:32
przeczytaj
https://en.cppreference.com/w​/cpp/language/templates
https:/​/www.softwaretestinghelp.com​/templates-in-cpp/

w drugim linku jest przedstawiony opisywany przez Ciebie problem 



P-175819
pekfos
» 2019-12-18 19:23:38
Nie taka jest składnia specjalizacji szablonu. Drugiej wersji kompilator nie wybierze, bo nie ma jak wydedukować typu T.
P-175821
chce_to_umiec
Temat założony przez niniejszego użytkownika
» 2019-12-18 22:29:21
dziękuję!
P-175824
« 1 »
  Strona 1 z 1