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

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

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

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

05.01.2013, 21:21. Просмотров 380. Ответов 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;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2013, 21:21
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Делегат на C++03 (C++):

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

QTreeWidget, делегат - C++ Qt
Добрый вечер. Прошу помочь разобраться с проблемой. Сделал свой виджет, затем сделал делегат. Вот код виджета: *.h class Triangle :...

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

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

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

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

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

QtreeWidget и делегат - Python
Создаю делегат для QtreeWidget, а он запускается в отдельном окне, в чем трабл?? class SpinBoxDDelegate(QStyledItemDelegate): def...

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

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

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


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

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

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