Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2011, 19:56   #1
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию MinGW, Делегаты.

в общем как организовать делегаты?

нашел rsdn.ru/article/cpp/delegates.xml
но на g++ не компилит(

может кто знает реализацию для g++?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.07.2011, 20:09   #2
alex_x_x
Форумчанин
 
Регистрация: 31.01.2011
Сообщений: 160
По умолчанию

а что не работает?
alex_x_x вне форума Ответить с цитированием
Старый 24.07.2011, 20:19   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

http://www.rsdn.ru/article/cpp/deleg...esDemo_vc7.zip
этот архив, хочу скомпилить демку.
ошибки во вложении
к сожалению шаблонные ошибки плохо умею разбирать
Вложения
Тип файла: txt Ошибки.txt (17.9 Кб, 121 просмотров)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.07.2011, 20:20   #4
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Эмм, делегаты в С++? Пепел Феникса, ну ... на С++ это извращение.
Ну..Делегаты в С++ реализованы в Visual Studio.
_-Re@l-_ вне форума Ответить с цитированием
Старый 24.07.2011, 20:25   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Ну..Делегаты в С++ реализованы в Visual Studio.
в dotNET которые?
они к С++ отношения не имеют.
Цитата:
Эмм, делегаты в С++? Пепел Феникса, ну ... на С++ это извращение.
в Делфи TNotifyEvent используете и норм, а на С++ сразу извращение...
мне б хотяб этот аналог Function of object, именно как в Делфи, а не к конкретному классу.
хотя лучше всего полноценные делегаты, аля как в шарпе...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 24.07.2011 в 20:32.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.07.2011, 20:37   #6
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Так, не понял, вам вообще что именно нужно?
Кстати, в С++ делегатам подобны указатели на функцию.
Вот из dotNet так
Код:
__delegate
И ещё. Если уж так надо, то лучше пишите на C# - будет гораздо проще.

Последний раз редактировалось _-Re@l-_; 24.07.2011 в 20:40.
_-Re@l-_ вне форума Ответить с цитированием
Старый 24.07.2011, 20:41   #7
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Вот простой пример делегата
Код:
#include <iostream>
 
class I {
   public:
      virtual void f() = 0;
      virtual void g() = 0;
};
 
class A : public I {
   public:
      void f() { std::cout << "A: вызываем метод f()" << std::endl; }
      void g() { std::cout << "A: вызываем метод g()" << std::endl; }
};
 
class B : public I {
   public:
      void f() { std::cout << "B: вызываем метод f()" << std::endl; }
      void g() { std::cout << "B: вызываем метод g()" << std::endl; }
};
 
class C : public I {
   public:
     // Конструктор
      C() : m_i ( new A() ) { }
     // Деструктор
      virtual ~C() {
         delete m_i;
      }
      void f() { m_i->f(); }
      void g() { m_i->g(); }
     // Этими методами меняем поле-объект, чьи методы будем делегировать
      void toA() {
         delete m_i;
         m_i = new A();
      }
      void toB() {
         delete m_i;
         m_i = new B();
      }
   private:
     // Объявляем объект методы которого будем делегировать
      I * m_i;
};
 
int main() {
   C c;
 
   c.f();
   c.g();
   c.toB();
   c.f();
   c.g();
 
   return 0;
}
(код с одной из статей на википедии)


Так же делегирование реализуют некоторые паттерны, например, фабричный метод
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Старый 24.07.2011, 20:53   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Кстати, в С++ делегатам подобны указатели на функцию.
лишь подобны, учитывая что указатель, на нестатический метод класса, привязан к классу...
Цитата:
Вот из dotNet так
С++ CLR то, но под .НЕТ я бы шарп взял.

нужны мне делегаты...
Цитата:
И ещё. Если уж так надо, то лучше пишите на C# - будет гораздо проще.
вам не кажется что я не спроста создаю тему в С++?
на шарпе умею, но мне он не подходит.

ну делегирование, не есть делегат всетаки...

мне нужно чтото наподобие того что в статье
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 24.07.2011 в 21:02.
Пепел Феникса вне форума Ответить с цитированием
Старый 24.07.2011, 23:44   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

http://habrahabr.ru/blogs/cpp/78299/
p51x вне форума Ответить с цитированием
Старый 25.07.2011, 00:52   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

так-с надо будет boost::function глянуть.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Делегаты CaypoH Общие вопросы .NET 3 04.01.2011 05:43
получение minGW the_deer_one Свободное общение 1 27.08.2010 04:18
События и делегаты в C# как они работают _PROGRAMM_ Общие вопросы .NET 11 04.02.2010 06:44
MinGW св-ва Пепел Феникса Общие вопросы C/C++ 3 21.12.2009 18:11
Делегаты в MSIL Андрей Стрелков Общие вопросы .NET 6 20.02.2009 19:17