привет, я создаю шаблон в C++, и мне нужно перезаписать оператор «<» внутри шаблона, чтобы иметь возможность сравнивать элементы внутри моей структуры данных. Кто-нибудь может рассказать мне, как его переписать ... Должен ли я отправить указатель на функцию внутри конструктора шаблона? У меня есть два шаблона, первый из которых - шаблон узла, который содержит указатель на данные, которыми я управляю. , а второй - шаблон кучи, который имеет вектор узлов *. В моей реализации я должен иметь возможность сравнивать между узлами *.Как перезаписать оператор внутри шаблона
ответ
Будет ли это делать? Я специально предусмотрел «оператор <» в области пространства имен, чтобы он был более общим, хотя в комментариях показано, как это сделать.
template<class T> struct A;
template<class T, class U> // Remove U and modify accordingly, if f and s
// have to be of the same type.
bool operator < (A<T> const &f, A<U> const &s){
// have the logic here
return true;
}
template<class T> struct A{
// template<class U> // This is how you define inside a class.
// bool operator < (A<U> const &s){
// have logic here
// return true;
// }
};
int main(){
A<int> a;
A<double> d;
bool b = a < d;
}
Если шаблон предназначен для типа элемента, просто предположите, что у них есть компаратор, т. Е. * Узел < * узел.
Перегрузка операторов на C++ на самом деле довольно проста. Возможно, что вы хотите сделать в своем классе узла является:
template<typename MyData>
class Node {
private:
MyData data_;
// ...
public:
// ...
bool operator < (Node const &rhs) const;
};
// ...
template<typename MyData>
bool Node<MyData>::operator < (Node const &rhs) const {
return data_ < rhs.data_;
}
Это перегружает <
оператор в Node
классе с версией, которая просто вызывает <
оператора Базового data_
-значения.
Вы можете поместить любой код внутри функции, кроме имени и количества параметров, у которых нет специальных свойств. Вы даже можете использовать это, чтобы сравнивать разные типы или возвращать разные значения. Вы могли бы, например, изменить rhs
в этом примере как int
, тогда вы могли бы сравнить узлы с целыми числами (например, Node n; if (n < 10) ...
).
- 1. Перезаписать оператор == глобально
- 2. Как перезаписать функцию внутри замыкания?
- 3. Оператор перегрузки с добавлением внутри класса шаблона
- 4. Получить узел внутри шаблона, если оператор
- 5. оператор как параметр шаблона
- 6. Перезаписать аргументы внутри функции
- 7. Оператор потока перегрузки класса шаблона вне шаблона
- 8. переопределить/перезаписать функцию внутри функции
- 9. Оператор-оператор с ++ 11/14 с перегрузкой параметра шаблона шаблона
- 10. Оператор присваивания класса шаблона
- 11. шаблона оператор литого C++
- 12. оператор шаблона ->
- 13. оператор() специализация шаблона
- 14. Перегрузки преобразование шаблона оператор
- 15. шаблона оператор специализация с =
- 16. оператор преобразования шаблона
- 17. Оператор шаблона и друга *
- 18. Почему оператор sizeof не работает внутри шаблона функции?
- 19. Пропустить оператор как параметр шаблона функции
- 20. C++ оператор шаблона не найден
- 21. plusequal оператор внутри, если оператор
- 22. Вызов шаблона внутри шаблона angularjs
- 23. Вызов шаблона функции внутри шаблона класса
- 24. шаблона функции внутри шаблона класса
- 25. Как IF НЕ внутри шаблона {{#each}}
- 26. Строка шаблона уса внутри внутри как HTML
- 27. Оператор шаблона C++ не найден как совпадение
- 28. Как создать оператор шаблона для перечислений
- 29. Как перезаписать метод динамически
- 30. Как мы компенсируем «оператор elvis» внутри выражения?
Что вы имеете в виду, предполагая, что у них есть компаратор, у них нет компаратора, и мне нужно сделать 1, мой вопрос в том, где и как мне реализовать перезапись. –
Как, черт возьми, вы могли бы создать компаратор для типа, которого вы не создали? – Puppy