-
- в С++ для этого используют делегаты и функторы. - ango(12.08.2011 15:12, ссылка)
- блин, не вкуриваю как прицепить функтор. Вот то что мне нужно: есть testA и testB, хочу вызвать testB.exec() через вызов testA.init, то есть ( testA.init( &testB.exec() ) ). Но вот кроме как через статический метод или статическую функцию не MegaJohn(449 знак., 30.08.2011 12:03, ссылка)
- Получить указатель на метод какого-нибудь объекта не получится, либо метод должен быть статический. Или сделать init, которому передается объект и функция. AlexBi(55 знак., 30.08.2011 12:29)
- Ну здрасьте "нельзя" - можно, конечно - =AlexD=(30.08.2011 12:38 - 12:40, ссылка)
- Можно, только при условии, что не выходишь за рамки одного класса. Если надо это получить в другом классе, то вместе с указателем на метод надо будет передавать и сам объект. - AlexBi(30.08.2011 13:13)
- шаблоны рулят lambda(36 знак., 31.08.2011 03:31, )
- Какие шаблоны? Корневое сообщение кто-то читает, прежде чем отвечать? Функция _beginthreadex() от API операционной системы ждёт указатель на обычную «С-шную» функцию. Которой можно передать void-указатель. Дальше уже в той функции можно этот ReAl(379 знак., 31.08.2011 10:25)
- Черного кобеля не отмоешь добела. А при чем тут c++? reader(74 знак., 01.09.2011 02:09, )
- Какие шаблоны? Корневое сообщение кто-то читает, прежде чем отвечать? Функция _beginthreadex() от API операционной системы ждёт указатель на обычную «С-шную» функцию. Которой можно передать void-указатель. Дальше уже в той функции можно этот ReAl(379 знак., 31.08.2011 10:25)
- шаблоны рулят lambda(36 знак., 31.08.2011 03:31, )
- Можно, только при условии, что не выходишь за рамки одного класса. Если надо это получить в другом классе, то вместе с указателем на метод надо будет передавать и сам объект. - AlexBi(30.08.2011 13:13)
- это то понятно. Об этом и писал в корне. Я предполагал, что есть другие пути. - MegaJohn(30.08.2011 12:34)
- Ну здрасьте "нельзя" - можно, конечно - =AlexD=(30.08.2011 12:38 - 12:40, ссылка)
- testA.init() как описан? Что она должна принимать? - =AlexD=(30.08.2011 12:08)
- выше ссылка на тестовый проект для MSVC2008. Но если у вас его нет, то вот всё[+] MegaJohn(1114 знак., 30.08.2011 12:16)
- Вызов свободной функции - это принципиально? =AlexD=(413 знак., 30.08.2011 12:34)
- Вот что значит - лень студию запускать - наделал ошибок, ладно, вроде все поправил, думаю техника ясна - =AlexD=(30.08.2011 12:36)
- ??? что-то всё равно еггогит [>] - MegaJohn(30.08.2011 12:42, ссылка)
- virtual operator() () = 0; - =AlexD=(30.08.2011 13:04)
- missing type specifier - int assumed. Note: C++ does not support default-int - MegaJohn(30.08.2011 13:08)
- Таки ты заставил меня запустить студию и выгрести все опечатки =AlexD=(476 знак., 30.08.2011 13:16)
- missing type specifier - int assumed. Note: C++ does not support default-int - MegaJohn(30.08.2011 13:08)
- virtual operator() () = 0; - =AlexD=(30.08.2011 13:04)
- ??? что-то всё равно еггогит [>] - MegaJohn(30.08.2011 12:42, ссылка)
- Вот что значит - лень студию запускать - наделал ошибок, ладно, вроде все поправил, думаю техника ясна - =AlexD=(30.08.2011 12:36)
- Вызов свободной функции - это принципиально? =AlexD=(413 знак., 30.08.2011 12:34)
- выше ссылка на тестовый проект для MSVC2008. Но если у вас его нет, то вот всё[+] MegaJohn(1114 знак., 30.08.2011 12:16)
- Получить указатель на метод какого-нибудь объекта не получится, либо метод должен быть статический. Или сделать init, которому передается объект и функция. AlexBi(55 знак., 30.08.2011 12:29)
- А толку? Повторяю -- beginthreadex() ждёт "обычную" функцию и void*-указатель. Она сама -- С-шная функция. Ей можно передать только некую свободную функцию (статическая функция класса годится) и некий указатель, чтобы та функция привела ReAl(153 знак., 12.08.2011 16:40)
- Согласен, в данном случае да. Но в общем, если нужен аналог коллбэк функции, то делегат или функтор очень даже подходит. Решение не на все случат жизни, но в конкретном проекте или библиотеке - самое то. - ango(12.08.2011 18:50)
- Дыу кто бы уродовался с указателями на невесть что, если бы ОС не требовала :-) - ReAl(12.08.2011 20:35)
- Согласен, в данном случае да. Но в общем, если нужен аналог коллбэк функции, то делегат или функтор очень даже подходит. Решение не на все случат жизни, но в конкретном проекте или библиотеке - самое то. - ango(12.08.2011 18:50)
- блин, не вкуриваю как прицепить функтор. Вот то что мне нужно: есть testA и testB, хочу вызвать testB.exec() через вызов testA.init, то есть ( testA.init( &testB.exec() ) ). Но вот кроме как через статический метод или статическую функцию не MegaJohn(449 знак., 30.08.2011 12:03, ссылка)
- В GCC тоже всё просто. Вложенная функция имеет доступ к локальным переменным внешней функции. Следовательно, можно определить локальную переменную с указателем на экземпляр класса, например, определить вложенную функцию и передать её адрес как fk0(141 знак., 12.08.2011 13:27)
- выбран сомнительный источник для обучения С++ :), они там от PASCAL стиля вызовов хотя бы избавились :)? не будучи С++ мастером предполагаю, что правильно так ыыыы(160 знак., 01.08.2011 20:09, )
- В _beginthreadex() нужно передать "просто-функцию" и можно передать для неё void*-указатель на "контекст" (одна функция может обслуживать несколько потоков). Потому и получается, что нужно сделать в (базовом) классе статическую функцию и в ReAl(410 знак., 02.08.2011 01:48)
- может я туплю, но "объекты и потомки" это всего лишь автоматическая проверка коректности кода, а если оперировать с указателями и void *, то вариантов полно (а скрыть в этом глюк еще больше) - могу нарыть кучу сорцов, где ООП реализуется ыыыы(214 знак., 12.08.2011 17:10, )
- Вопрос такой. Вот под виндой запустить поток, это позвать begithreadex(void (*threadfunc)(), void *threaddata) (ну там ещё параметры, но они в контексте обсуждения не важны). Как писать приложение на С++ со своими классами-"работниками" ReAl(180 знак., 12.08.2011 17:53 - 17:57)
- может я туплю, но "объекты и потомки" это всего лишь автоматическая проверка коректности кода, а если оперировать с указателями и void *, то вариантов полно (а скрыть в этом глюк еще больше) - могу нарыть кучу сорцов, где ООП реализуется ыыыы(214 знак., 12.08.2011 17:10, )
- В _beginthreadex() нужно передать "просто-функцию" и можно передать для неё void*-указатель на "контекст" (одна функция может обслуживать несколько потоков). Потому и получается, что нужно сделать в (базовом) классе статическую функцию и в ReAl(410 знак., 02.08.2011 01:48)
- в С++ для этого используют делегаты и функторы. - ango(12.08.2011 15:12, ссылка)