Параметр шаблона проверки объекта - PullRequest
0 голосов
/ 27 мая 2018

Я пытаюсь проверить в этой функции, если параметр 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;
}

1 Ответ

0 голосов
/ 27 мая 2018

Если вы хотите специализировать функцию-член для шаблонного класса, вам нужно специализировать весь класс.Вот минимальный пример, чтобы дать вам идею.

#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';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...