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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2010, 14:05   #1
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию Аналог procedure of object.

в общем в Делфи есть тип которых хранит в себе указатель на обьект и на адрес его метода.
соответственно такая процедура исполняется от имени обьекта(ну обьект в итоге это this(как и положенно))
есть ли подобное в С++, или надо самому писать?

или иначе обьясню,
у меня есть:
Код:
class My
{
    void Method(int);
}

My m;
как обьявить указатель на метод типа Method(параметры те же всмысле)
чтоб потом после присваивания, при попытке выполнения по указателю выполнилось в итоге m.Method(...)?

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

Последний раз редактировалось Пепел Феникса; 20.10.2010 в 14:11.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2010, 16:25   #2
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

тебе, наверное, нужен указатель на член-функцию. Например
Код:
class MyClass{
public:
	typedef void (MyClass::*f_ptr)(int, int);
	void MyFunction(int p1, int p2){
		cout << "text" <<endl;
	}

};

int main()
{
	MyClass a;
	MyClass::f_ptr SomeFunc = &MyClass::MyFunction;
	(a.*SomeFunc)(1,2);
	return (0);
}  

};
об этом хорошо и подробно написано тут:
http://www.rsdn.ru/article/cpp/fastdelegate.xml
sashonk вне форума Ответить с цитированием
Старый 20.10.2010, 16:27   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

почти, а можно ли делать чтоб был не определенны класс, а любой класс(главное совпадение параметров)?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2010, 17:06   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Поправьте меня, по-моему в си это называется delegate
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.10.2010, 18:38   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

да они, но похоже в стандарте их нема...
ладненько видимо придется свое писать..
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2010, 18:50   #6
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Раз в C++, может макрос, где параметры функции + ссылка на объект? в свою очередь макрос обернет этот объект в строку типа объект->метод(параметры...);
Если я правильно понимаю что именно надо. Т.к. с одной стороны вы хотите ссылку на функцию, но потом говорите о классах, и методах класса, что уже смахивает на интерфейс больше
BOBAH13 вне форума Ответить с цитированием
Старый 20.10.2010, 19:01   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

мне нужна ссылка на метод класса, но, не на метод определенного класса, а на метод любого класса(лишь бы параметры совпадали)
в Делфи например возьмем TNotifyEvent=procedure(Sender:TObje ct) of object;
эта вещь весит 8байт и по сути есть просто напросто
Код:
TDelegate=record
 This:TObject
 Method:Pointer;
end;
в итоге оно вызывается как будто я вызвал This.Method
вот что мне нужно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2010, 19:09   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Вроде понял, действительно это проблема. Провел небольшой рэсеч, надеюсь это поможет
BOBAH13 вне форума Ответить с цитированием
Старый 20.10.2010, 19:28   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

спасибо, похоже на то
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2010, 23:36   #10
sashonk
Форумчанин
 
Регистрация: 26.10.2009
Сообщений: 170
По умолчанию

Цитата:
надеюсь это поможет
вроде бы, те же указатели на функции-члены, завернутые в шаблоны
sashonk вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Procedure ALABAMA Паскаль, Turbo Pascal, PascalABC.NET 3 20.05.2010 21:06
Procedure SQL Neymexa SQL, базы данных 7 23.03.2010 09:29
Procedure unknown yulia БД в Delphi 9 26.01.2009 01:33
Проблемма с object, procedure AngelOfDeath Общие вопросы Delphi 2 20.08.2008 15:08
procedure! please! help! NeAlSe Помощь студентам 2 15.06.2008 15:38