Проверьте, является ли тип шаблона указателем
Привет. Я пытаюсь проверить тип шаблона, если это указатель, в основном моя цель состоит в том, чтобы создать класс контейнера, который будет знать, как сравнивать объекты независимо от того, является ли объект указателем или нет. Я хочу, чтобы класс динамически выбирал метод сравнения. Мой текущий код находится ниже, но он не работает, и я не знаю, в чем проблема. Он всегда выбирает
compare_ptrкак метод сравнения. Ниже кода
std::vector<int> vec; vec.push_back(1); int test = 0; for (const int& val : vec) { bool b = compare(val, test); }
дает эту ошибку:
main.cpp:111: error: invalid type argument of unary ‘*’ (have ‘int’) return *obj1 == *obj2;
Я был бы очень признателен вам за помощь. Спасибо.
Что я уже пробовал:
template<typename Type> struct is_shared_ptr { static const bool value = false; }; template<typename Type> struct is_shared_ptr<std::shared_ptr<Type>> { static const bool value = true; }; template <class T> static bool compare_ptr(const T& obj1, const T& obj2) { return *obj1 == *obj2; } template <class T> static bool compare_obj(const T& obj1, const T& obj2) { return obj1 == obj2; } template <class T> static bool compare(const T& obj1, const T& obj2) { if (is_shared_ptr<T>::value) { return compare_ptr(obj1, obj2); } else { return compare_obj(obj1, obj2); } }