Специализации функции. Разница между типом указателя и строкой? - PullRequest
0 голосов
/ 24 марта 2020
template<typename T>
int compare(T a, T b) {
    return (a < b) ? 1 :(a > b) ? -1 : 0;
}

template<typename T>
int compare(T* a, T* b) {
    return (*a < *b) ? 1 :(*a > * b) ? -1 : 0;
}
template<>
int compare<string>(string a, string b) {
    return  (a < b) ? 1 : (a > b) ? -1 : 0;
}


 int main(){
    int a = 3;
    int b = 4;
    compare("Hello", "World"); //1
    compare(&a, &b); //2
 }

Проблема: функция int Сравнить (T * a, T * b) вызывает первый и второй регистр;

DOD: вызвать функцию int сравнить (строка a, строка b) для первый регистр;

1 Ответ

0 голосов
/ 24 марта 2020

"Hello" - это const char[6]. При использовании в качестве аргумента это лучше подходит для const char*, чем для std::string. Последнее является определяемым пользователем преобразованием.

Решение:

using namespace std::literals;
compare("Hello"s, "World"s);

Это std::string литералы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...