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

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

Войти
Регистрация
Восстановить пароль
 
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
#1

Делегат на C++03 - C++

05.01.2013, 21:21. Просмотров 341. Ответов 4
Метки нет (Все метки)

Сойдет за простейшую реализацию делегата?
Файл Delegate.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>
 
class Delegate
{
    std::vector<void(*)()> farr;
public:
    Delegate  ();
    ~Delegate ();
 
    bool operator()(void);
    bool operator +=(void (*pf)());
    bool operator -=(void (*pf)());
};
Файл Delegate.cpp:
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include "Delegate.h"
 
Delegate:: Delegate () {}
Delegate::~Delegate () {}
bool Delegate::operator()(void)
{
    bool ret_val = false;
    try
    {
        for (std::vector<void(*)()>::const_iterator curr_it = farr.begin(); curr_it != farr.end(); ++curr_it)
        {
            (*curr_it)();
        }
    }
    catch (...)
    {
        ret_val = true;
    }
    return ret_val;
}
bool Delegate::operator +=(void (*pf)())
{
    bool ret_val = false;
    try
    {
        farr.push_back(pf);
    }
    catch (...)
    {
        ret_val = true;
    }
    return ret_val;
}
bool Delegate::operator -=(void (*pf)())
{
    bool ret_val = false;
    try
    {
        for (std::vector<void(*)()>::iterator curr_it = farr.begin(); curr_it != farr.end(); ++curr_it)
        {
            if ((*curr_it) == pf)
            {
                farr.erase(curr_it);
                break;
            }
        }
    }
    catch (...)
    {
        ret_val = true;
    }
    return ret_val;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2013, 21:21     Делегат на C++03
Посмотрите здесь:

Требуется класс, делегат, перечисление, интерфейс или структура - C++
помогите понять в чем тут всё таки ошибка, все попытки исправить самостоятельно были безрезультатны... using System; using...

Переопределить делегат - C++ Qt
Доброго времени суток, использую QTableView для отображения таблиц SQLITE, в котором(заранее извиняюсь за кривую формулировку) все поля...

переопределить делегат - C++ Qt
Доброго времени суток, необходимо запретить пользователю редактировать кое какие колонки в QTableView , полазил в инете нашел что самый...

Обобщенный делегат - C#
Всем доброго времени суток. Необходима помощь профессионалов. Есть код: using System; namespace MyProgram { public class...

try/finally и делегат - Java
есть примерный код boolean status = m_device.start(); if (status) { m_timer...

Правильно вернуть делегат - C#
С делегатами особо не общался, поэтому возможно написал бред, помогите исправить ошибку PacketHandlers GetHandlerById(byte Id)...

Можно ли перегрузить делегат? - C#
Мне нужно, чтобы KeyPressEventHandler содержал следующие параметры:delegate void KeyPressEventHandler(Form1 f, Graphics g, object sender,...

Делегат не видит метод - C#
Делегат не видит метод который я ему передаю. ниже в коде я отметил место где происходит передача. using System; using...

Стандартный делегат EventHandler - C#
Здравствуйте! Есть у меня такой код public delegate void MyDelegate(string s); public event MyDelegate MyEvent; вычитал я, что...

Как применить делегат - C++ Qt
Извиняюсь за нубский вопрос, просто читаю Бланшет, а там про делегаты нема((( Есть делагат: class MyDelegate : public...

Сравнение площадей (Делегат) - C#
Даны радиус окружности и сторона квадрата. Написать вычисления площади этих фигур в виде отдельных методов. Для их вызова применить...

Сортировка через делегат - C#
Есть класс, реализующий список public abstract class IList&lt;T&gt;:IEnumerable&lt;T&gt; и его наследники class ArrayList&lt;T&gt;:IList&lt;T&gt; class...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dmitriy_M
1340 / 1221 / 111
Регистрация: 20.03.2009
Сообщений: 4,376
Записей в блоге: 11
05.01.2013, 22:14     Делегат на C++03 #2
C++ (Qt)
1
2
bool operator +=(void (*pf)());
bool operator -=(void (*pf)())
Здесь ты меняешь смысл операций += и -=; Все ожидают, что эти операции будут возвращать модифицированный объект.
Whiteha
Программист
33 / 33 / 4
Регистрация: 08.07.2011
Сообщений: 190
Записей в блоге: 1
05.01.2013, 22:27  [ТС]     Делегат на C++03 #3
Dmitriy_M, неоспоримо конечно, но сделано было со злым умыслом на то, что писать
C++
1
(foo.onClick += Event1) += Event2;
никто не будет, хотя вполне вероятно что я заблуждаюсь в чем-либо - поэтому и создал тему)
Dmitriy_M
1340 / 1221 / 111
Регистрация: 20.03.2009
Сообщений: 4,376
Записей в блоге: 11
06.01.2013, 01:35     Делегат на C++03 #4
Цитата Сообщение от Whiteha Посмотреть сообщение
никто не будет
Один из законов Мерфи: Все что можно сделать не так, обязательно будет кем-то сделано.
Удаление из std::vector довольно дорогая операция. Используй std::list, у него есть метод remove удаляющий по значению.
OhMyGodSoLong
~ Эврика! ~
1243 / 992 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
06.01.2013, 10:29     Делегат на C++03 #5
Только это скорее какой-то event listener :\ Да и аргумент бы не помешал, хоть один. И методы объектов с помощью этой штуки не вызвать.
Yandex
Объявления
06.01.2013, 10:29     Делегат на C++03
Ответ Создать тему
Опции темы

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