Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
trympyrym
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 17
#1

Как передать "operator<" в функцию? - C++

24.11.2013, 03:54. Просмотров 573. Ответов 5
Метки нет (Все метки)

Есть шаблонная функция, которая принимает компаратор. Как передать в качестве этого компаратора operator< ?

Тестовый пример: обернутый "operator<" работает, а необернутый - не работает.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
 
struct comparator
{
    bool operator()(int a, int b)
    {
        return a < b;
    }
};
 
template <class Compare>
void function(Compare &comp)
{
    cout << comp(1, 2) << endl;
    cout << comp(2, 1) << endl;
}
Если после этого пишу:

C++
1
2
3
4
5
int main() {
    comparator QWE;
    function(QWE);
    return 0;
}
то все работает, а если пишу:

C++
1
2
3
4
int main() {
    function(operator<);
    return 0;
}
то не работает(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2013, 03:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как передать "operator<" в функцию? (C++):

Как передать объект "Стек" в функцию? - C++
Интересует такой вопрос, а как передать класс стека в параметр процедуры или функции? например программа, и хочу сделать чтобы она была...

Перегрузить операторы operator+() и operator*() в пользовательском классе "Комплексное число" - C++
Здравствуйте. Предлагаю заняться арифметикой. Создал прослейший класс, перегрузил операторы сложения и умножения, в конструкторе...

Чем "operator *=" отличается от "operator *"? - C++
снова застряла, не могу понять, чем этот оператор должен отличаться от оператора*.....? вот он, но это работает только в случае...

Как передать параметр типа "указатель на указатель" в функцию? - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; #include &lt;iomanip&gt; using std::setiosflags; ...

More C++ Idioms/Execute-Around Pointer как в этом случае работает "operator->()" - C++
Читаю сейчас More C++ Idioms Дошел до Execute-Around Pointer и впал в ступор. Есть код // ideone.com/R728xo #include &lt;iostream&gt; ...

Написать функцию поиска человека по полю "фамилия" в массиве структур "Note" ("Персональная информация") - C++
Вывести из структуры информацию о человеке, чья фамилия введена с клавиатуры #include &lt;iostream&gt; #include &lt;locale&gt; #include...

5
stima
487 / 339 / 39
Регистрация: 22.03.2011
Сообщений: 1,084
Завершенные тесты: 2
24.11.2013, 04:04 #2
Во первых
C++
1
2
3
4
5
int main() {
    comparator QWE;     //<------------ Это обьект!
    function(QWE);        //<---------- передача обьекта с перегруженым методом ()
    return 0;
}
Во вторых
C++
1
2
3
4
int main() {
    function(operator<);        //<---------- Что это? (укажите тип)
    return 0;
}
0
trympyrym
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 17
24.11.2013, 05:36  [ТС] #3
Цитата Сообщение от stima Посмотреть сообщение
Что это? (укажите тип)
Это я хочу передать в функцию необернутый оператор сравнения. Но я не знаю, как это сделать.
0
stima
487 / 339 / 39
Регистрация: 22.03.2011
Сообщений: 1,084
Завершенные тесты: 2
24.11.2013, 06:00 #4
Вам стоит подучить основы. Вы что-то путаете. С++ не оперирует "операторами как обьектами", но возможно передать указатель на функцию.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
bool my_compare(int lhs, int rhs)
{
    return rhs > lhs;
}
 
bool foo(bool(*compare)(int,int), int a, int b)
{
    return compare(a, b);
}
 
int main()
{
    std::cout << foo(&my_compare, 1, 2) << std::endl;
 
    return 0;
}
0
0x10
2474 / 1647 / 247
Регистрация: 24.11.2012
Сообщений: 4,068
24.11.2013, 08:24 #5
http://www.cplusplus.com/reference/functional/less/
1
trympyrym
0 / 0 / 0
Регистрация: 13.08.2013
Сообщений: 17
24.11.2013, 16:59  [ТС] #6
То, что надо. Спасибо.
0
24.11.2013, 16:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.11.2013, 16:59
Привет! Вот еще темы с ответами:

Как переопределить "operator <<" для cout? - C++
использую RAD 2010 (MVS 2010 стал сильно тормозить и я перешёл). setlocale не помогает, функция char bufRus; char* Rus(const char*...

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Как сделать "operator ==" внешним? - C++
Здравствуйте! Так я определяю оператор равенства внутри класса chislo. Как мне отделить его от класса? Т.е. как мне записать его вне...

Expected init-declarator before "operator".expected `,' or `;' before "operator" - C++
Пример не мой. Пытаюсь у себя запустить и чтото неполучается. Ошибка на строке 24 Expected init-declarator before &quot;operator&quot;.Expected...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru