Укозатель на метод класса
Имеится некая библиотечная функция, которая принимает в параметры укозатель на функцию:
PHP код:
Повсякому пробывал - компилятор ругается. Как? upd: если не использовать классы, то всё ок. |
Ответ: Укозатель на метод класса
|
Ответ: Укозатель на метод класса
видел. читал. непомогает((
PHP код:
Цитата:
|
Ответ: Укозатель на метод класса
код, где вызваешь покажи
и без смайлов |
Ответ: Укозатель на метод класса
кусок файла net.cpp
PHP код:
|
Ответ: Укозатель на метод класса
скорее всего трабла в том, что функция требует в качве параметра глобальную (или статическую) функцию, а ты даёшь нестатический метод.
|
Ответ: Укозатель на метод класса
описание функции
все методы нестатические. |
Ответ: Укозатель на метод класса
сделал тупо приведение:
PHP код:
буде тестить |
Ответ: Укозатель на метод класса
вообще штатными средствами в си нельзя на нестатичный метод ссылку сделать
это возможно благодаря делегатам, которые есть в других языках, и которые сделал Александреску в си++ с помощью шаблонов, но таким способом, что уж лучше придумать как нибудь без делегатов об этом написано в его книге, там он много всяких вкусностей, которых нету в си++, сделал с помощью шаблонов |
Ответ: Укозатель на метод класса
делай метод статичным. подумай сам - у какого именно объекта должны вызваться функция, если у тебя их будет 42?
|
Ответ: Укозатель на метод класса
Цитата:
|
Ответ: Укозатель на метод класса
так ведь этот this твоя библиотечная функция и не знает
просто ссылка на метод для всех обьектов одинакова, когда ты вызваешь метод для обьекта ему еще тайно от тебя передается указатель this и просто так функции этот указатель не передать и выхода два, либо как казал холидел статик, либо делегат, что в си++ изврат с садомазой)) |
Ответ: Укозатель на метод класса
Цитата:
цель: Код:
class MyCl{ Код:
MyCl *ParentInterface; Код:
FunctionPtr=&MyCl::func1; Код:
(ParentInterface->*FunctionPtr)(0,0,0); upd поправил код |
Ответ: Укозатель на метод класса
этот код работает? или это с++0x уже? я просто новый стандарт не знаю
а то как бы это получаются делегаты через обычный указатель (я думал что в си такое невозможно ) вот статья на хабре как сделать простой делегат на си++ http://habrahabr.ru/blogs/cpp/78299/ UPD У меня так не работает. Он говорит что функптр должен быть указатель на функцию, а если я его обьявляю как указатель на функцию, он пишет что он должен быть указатель на член)) |
Ответ: Укозатель на метод класса
Да, код работает на MSVC++ 6.0 (откуда [год разработки 6-ой сутдии] можно сделать вывод, что это не с++0x).
Повторю ещё раз ссылку на руководство по указателям на функции http://www.newty.de/fpt/index.html Цитата:
Код:
(ParentInterface->*FunctionPtr)(0,0,0); |
Часовой пояс GMT +4, время: 14:33. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot