@nadom

Можно ли перегружать базовые типы в С++?

Можно ли реализовать перегрузку базового типа в С++ ?
Например перегрузить операторы сравнения < > == для char/char*.
Необходимо мне это, чтобы удобно работать с шаблонным деревом, а не переделывать под char*.
  • Вопрос задан
  • 2498 просмотров
Решения вопроса 2
@MiiNiPaa
Нет, нельзя. В вашем случае можно написать свой компаратор и передать его шаблонным параметром в ваше дерево.
Если оно не поддерживает кастомных компараторов, добавьте поддержку, это очень полезно.
Ответ написан
@MarkusD Куратор тега C++
все время мелю чепуху :)
Немного расширю ответ MiiNiPaa.

Добавить поддержку шаблонных компараторов можно таким образом:
template< typename item_t, template< typename > class item_traits >
class item_processor{
private:
	typedef item_traits<item_t> traits_t;
	...
};


Изюмина во втором параметре шаблона - это шаблонный параметр шаблона. :)
У Девида Вандервуда по этому поводу было даже так написано: "Поскольку параметр шаблонного параметра шаблона не используется, его имя можно опустить".
Такая запись говорит о том, что при инстанцировании или специализации шаблона в его объявлении ожидается только имя шаблона, а не его инстанцирование.

Используется это дело вот так:
template< typename target_t >
class traits_less;

...

item_processor<char, traits_less> char_processor;


Все компараторы STL имеют один параметр шаблона. Таким образом, их использование тоже становится допустимо в качестве параметра для item_processor. В то же время, и свой компаратор в такую систему добавить проблемы не составит.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
tsarevfs
@tsarevfs Куратор тега C++
C++ developer
Это определенно плохая идея. Если вы хотите удобно сравнивать строки используйте std::string.
Ответ написан
AxisPod
@AxisPod
Перегрузить то можно, но что из этого выйдет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы