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

Заменить делегаты функциями обратного вызова - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ В файле data.dat хранятся фамилия и годы рождения участников. найти средний возраст участников http://www.cyberforum.ru/cpp-beginners/thread1147999.html
в файле data.dat хранятся фамилия и годы рождения участников. найти средний возраст участников, вывести фамилии тех участников возраст которых наибольший
C++ Ошибки связанные с односвязным списком Здравствуйте... Решила сама разобраться и написать программу, связанную с работой с односвязным списком. Для красоты решила оформить каждое действие(добавление, удаление, печать и ввод, вот только редактирование элемента списка ума не приложу как сделать) в виде структуры... да столкнулась с проблемами... помогите пожалуйста исправить. #include<iostream> #include<conio.h> #include<fstream>... http://www.cyberforum.ru/cpp-beginners/thread1147967.html
Вывод времени со сдвигом на час C++
Есть задача - вывести текущее время и время со сдвигом на час от текущего времени. Вроде бы, все должно быть просто #include <iostream> #include <time.h> using namespace std; int main() {
C++ Исправьте кому не сложно
Здравствуйте, поправьте пожалуйста код кому не сложно компилятор dev c++ 4.9.9.2 #include "iostream" #include <string.h> using namespace std; class Base // bazovyy class soderzhit vse obschie { // polya i methody protected:
C++ Удалить из массива, в котором все элементы различны, максимальный и минимальный элементы http://www.cyberforum.ru/cpp-beginners/thread1147894.html
Удалить из массива, в котором все элементы различны: а) максимальный элемент б) минимальный элемент Добавлено через 4 минуты Основу сделал #include <iostream> #include <vcl.h>
C++ Удалить из односвязного линейного списка определенный узел Построить односвязный список из входной последовательности целых чисел. Написать программу, которая удаляет из линейного списка входной последовательности целых чисел: Узел, содержащий число, равное числу предыдущего узла списка. Выручайте, весь поиск перерыл, ничего толком не нашел) подробнее

Показать сообщение отдельно
DrOffset
6423 / 3797 / 878
Регистрация: 30.01.2014
Сообщений: 6,586
18.04.2014, 20:31     Заменить делегаты функциями обратного вызова
Цитата Сообщение от AceOfSpades Посмотреть сообщение
Просто мы друг друга не понимаем)) я об одном, вы о другом.
Возможно.
Я сейчас просмотрел еще раз ваш код и вопросы автора. Если я правильно понял, то данные операторы
C++
1
2
inline bool operator==(int a) { return (a == NULL) && (callBackList.size() == 0); }
inline bool operator!=(int a) { return (a == NULL) && (callBackList.size() != 0); }
Нужны для того, что бы работала данная проверка?
C++
1
2
3
4
void StopEvent(){
    if (OnStop != NULL)
        OnStop(this, new EventArgs());
}
Все что, что я говорил выше верно для этого случая. В С++ не принято так делать, этот код запутает плюсовика, как запутал сейчас меня. NULL, как я объяснял выше, применяется для указателей. Очевидно, что, здесь никаких указателей нет. Поэтому, нужно либо изменить операторы следующим образом (кстати, нет ли тут ошибки, в обоих операторах сравнение с NULL и &&, но этого вопроса я сейчас не касаюсь):
C++
1
2
inline bool operator==(void * a) { return (a == NULL) && (callBackList.size() == 0); }
inline bool operator!=(void * a) { return (a == NULL) && (callBackList.size() != 0); }
Однако это тоже не будет иметь нужного эффекта. Т.к. может спровоцировать на сравнение с другими указателями, отличными от NULL, хотя этого здесь не требуется.
Поэтому очевидным и правильным с т.з. программирования на С++, но в то же время идеологически будет соответствовать смыслу, который он несет в С#, будет такой оператор вместо двух вышеприведенных:
C++
1
inline operator bool() const { return callBackList.size() != 0; }
Соответственно проверка будет выглядеть так:
C++
1
2
3
4
void StopEvent() {
     if(OnStop)
         OnStop(this, new EventArgs());
}
Добавлено через 7 минут
addition:
Я в первую очередь пишу это здесь не для того, что бы кого-то принизить или уличить в ошибке, а только лишь из соображений корректности ответа. Слишком уж велик шанс неправильно научить человека.
 
Текущее время: 14:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru