Я пытаюсь проверить в этой функции, если параметр T также имеет тип char*, как я могу этого добиться, потому что в этой реализации он вернет false, а getValue вернет объект типа T
template<class T>
bool Pair<T>::operator==(const Pair<T> &pair)
{
if (strcmp(getKey(),pair.getKey())==0 && pair.getValue()==pair.getValue())
{
return true;
}
return false;
}
Итак, Pair можно использовать с рядом различных T, где char* - один из них? Вы хотите сделать operator== специализированным для корпуса, тогда T - это char*?
да, это то, чем я хочу заниматься @super
@Karmen Это легко сделать, но для этого потребуется специализировать весь класс Pair, вы не можете специализировать функцию-член, не специализируя весь класс.
Я не могу его специализировать, потому что пользователь выбирает T
Именно для этого и нужна специализация шаблонов. Вы определяете шаблон одним способом, и для определенного экземпляра вы можете задать ему альтернативное поведение (в этом случае, когда пользователь выбирает char*).
да, но оператор == должен работать в одном направлении, когда T = char *, в операторе == он должен работать с strcmp (x, y), а если T = int, тогда делать x == y Я хочу разделить эти случаи в моем = = оператор, который я показал
Как я уже сказал, для этого вам нужно специализировать весь класс. Я отправлю ответ, чтобы дать вам представление.





Если вы хотите специализировать функцию-член для класса шаблона, вам необходимо специализировать весь класс. Вот минимальный пример, чтобы дать вам представление.
#include <iostream>
#include <cstring>
template <typename T>
class Pair {
public:
Pair(T val) : value(val) {}
bool operator==(const Pair& other) {
return value == other.value;
}
private:
T value;
};
template <>
class Pair<char*> {
public:
Pair(const char* val) {
std::size_t size = std::strlen(val) + 1;
value = new char[size];
memcpy(value, val, size);
}
~Pair() {
delete value;
}
bool operator==(const Pair& other) {
return std::strcmp(value, other.value) == 0;
}
private:
char* value;
};
int main() {
Pair<int> p1(5), p2(5), p3(4);
Pair<char*> p4("Hey"), p5("Hey"), p6("Bye");
std::cout << (p1 == p2) << '\n' << (p1 == p3) << '\n';
std::cout << (p4 == p5) << '\n' << (p4 == p6) << '\n';
}
Вы имеете в виду специализация шаблона?