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

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

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

Можно ли передать в функцию указатель на перегруженный оператор? - C++

24.02.2014, 02:29. Просмотров 444. Ответов 4
Метки нет (Все метки)

Снова здравствуйте)

Можно ли передать в функцию указатель на перегруженный оператор и как? Что-то типа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class f 
{
        ...
    int operator ()(int y)
    {
        cout<<"win!!!";
        return 2+y;
    }
        ...
};
 
int fun(int x(int))
{
    return x(34);
}
 
int main()
{
    f a;
    cout<<fun(какая-то магия);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2014, 02:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Можно ли передать в функцию указатель на перегруженный оператор? (C++):

А можно в функцию, или перегруженный оператор передать ссылку на копию? - C++
И какой надо написать прототип?

Как использовать перегруженный оператор [ ], если дан не сам класс, а указатель на него? - C++
Это указатель на класс figure *f Это перегрузка оператора void figure::operator (int i) { cout &lt;&lt; &quot;(&quot; &lt;&lt; massiv.x &lt;&lt; &quot;,&quot; &lt;&lt;...

Можно ли передать указатель на функцию как параметр другой функции? - C++
В общем, вопрос. Можно ли, допустим ... int fun1(int x) { ... ... ... return x*1000; }

В функцию-метод передать указатель на другую функцию-метод и вызвать через переданный указатель - C++
Друзья! Всем привет. Вот код: class otets { public: void f (void (otets::*p)()); private: void echo_f (){}; ...

Передать в неуправляемую функцию указатель на указатель - C++
Неуправляемая функция типа FUNC(int ** r); Делаю так fixed (int* ptr = arr) { FUNC((int **)ptr); ...

Перезагрузить оператор cout, объекты класса передать через указатель и - C++
Нужно перезагрузить оператор cout Объекты класса передать через указатель и периметр треугольника вывести как сумма 3-х чисел с...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
24.02.2014, 04:13 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>                                                               
#include <functional>                                                             
                                                                                  
using std::placeholders::_1;                                                      
                                                                                  
class F                                                                           
{                                                                                 
public:                                                                           
    int operator ()(int y)                                                        
    {                                                                             
        return 2+y;                                                               
    }                                                                             
};                                                                                
                                                                                  
template <typename fptr>                                                          
int fun(fptr f)                                                                   
{                                                                                 
    return f(34);                                                                 
}                                                                                 
                                                                                  
int fun1(std::function<int (int)> f)                                              
{                                                                                 
    return f(34);                                                                 
}                                                                                 
                                                                                  
int main()                                                                        
{                                                                                 
    F f;                                                                          
    std::cout << fun(std::bind1st(std::mem_fun(&F::operator()), &f)) << std::endl;
    std::cout << fun1(std::bind(&F::operator(), &f, _1)) << std::endl;            
}
0
alsav22
5420 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
24.02.2014, 04:23 #3
Цитата Сообщение от GysevVlad Посмотреть сообщение
Можно ли передать в функцию указатель на перегруженный оператор и как? Что-то типа:
Зачем его передавать? Если нужно использовать в функции, то можно и так сделать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class f 
{
public:
    
    int operator ()(int y)
    {
        cout<<"win!!!";
        return 2 + y;
    }
        
};
 
int fun(int x)
{
    f a;
    return a(x);
}
 
int main()
{
    f a;
    cout << fun(34);
}
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
24.02.2014, 04:27 #4
собсно тут два пути
1) использовать старые недобрые функции (c++98), генерящии врапперы вокруг member function
&F::operator - pointer to member
std::mem_fun(&F::operator()), &f) - генерирует функтор, принимающий два аргумента - F* (указатель объекта, у которого вызывается member function) и int - непосредственно аргумента F::operator()(int)
дальше биндим первый аргумент (F*) на поинтер объекта - std::bind1st(std::mem_fun(&F::operator()), &f)
к сожалению получившийся функтор имеет тип, непригодный для определения функции (он унаследован от std::unary_function, но в unary_function однако не определен operator()(Arg)) - поэтому для простоты можно позволить компилятору вывести тип из шаблона.
Второй вариант (более адекватный) - использовать bind/function из c++11 / boost
В с++11 можно при желании сконтруировать функтор не через bind, а заданием лямбды (3ий вариант)

C++
1
2
3
4
5
6
7
8
9
int fun2(std::function<int (int)> f) { 
    return f(34);                      
}                                      
                                       
int main()                                                                          
{                                                                                   
    F f;                                                                                  
    std::cout << fun2([&f](int arg){ return f(arg); }) << std::endl;                
}
1
GysevVlad
0 / 0 / 0
Регистрация: 19.02.2014
Сообщений: 13
24.02.2014, 17:17  [ТС] #5
alex_x_x, я не особо въехал. Можете подробнее примеры дать или годную литературу?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2014, 17:17
Привет! Вот еще темы с ответами:

Работа с файлом (передать указатель на файл в функцию, вернуть указатель на файл из функции) - C++
Подскажите как передать указатель на файл в функцию, как вернуть указатель на файл из функции. void Open() // из этой функции вернуть...

Как передать параметр типа "указатель на указатель" в функцию? - 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; ...

Как передать указатель на функцию в функцию - C++
И как с ней работать?

Передать указатель в функцию - C++
Помогите, пожалуйста, как передать указатель на элемент линейного списка?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.02.2014, 17:17
Ответ Создать тему
Опции темы

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