Указатель На Функцию Член

Указатель На Функцию Член




⚡ 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻

































Указатель На Функцию Член


Поделиться


Источник


  

11 сентября 2012 в 20:22






Поделиться



  

11 сентября 2012 в 20:38



Я хочу использовать библиотеку (nlopt) которая имеет функцию set_min_objective которая принимает указатель на числовую функцию myfunc и найти ее минимум. Я бы хотел создать класс который будет содержать соответствующим образом инициализированную функцию-член. set_min_objective затем находил бы оптимум в конкретном экземпляре (myP в примере ниже). Последовательность вызова такая:
И я бы хотел использовать что-то вроде:
Ошибку я получаю при компиляции вот такую:
Какое было бы простейшее решение иметь set_min_objective принимает myP.f как нормальный указатель на функцию ? Обратите внимание что myP.f и myfunc имеют одинаковые аргументы и возвращаемые value типы.

Пытаюсь сделать некоторые вроде этого: class A { void *(*func)(void *); A(void *(*function)(void *)){ func = function; } } class B { void *real_func(void *); A ptr; B() :ptr(&real_func) { ... } } Но получаю вот такую ошибку: error: ISO C++ Запрещает принимать адрес неквалифицированной или...


I have the following class: class Point2D { protected: double x; double y; public: double getX() const {return this->x;} double getY() const {return this->y;} ... }; Иногда мне нужно вернуть x координату, иногда y координату, поэтому я с помощью pointer на член функции getX(), getY(). Но я...

Вы не можете этого сделать напрямую. Вы пытаетесь передать указатель-на-член-функции в качестве указателя-на-функцию. Путь перехода - написать функцию-обертку (обычную функцию) которая, например, делегирует вычисление функции-члену вашего объекта, который является, например, глобальным объектом.
Собственно, вам повезло: второй параметр к opt.set_min_objective - это указатель на ваши данные, который будет передан в функцию, которой вы передаете pointer to в качестве первого параметра. Это значит, что вашей функции-обертке не обязательно использовать глобальный объект.
Еще одна правка. Еще у кого-то была подобная проблема до вас: http://www.cplusplus.com/forum/general/73166/

У меня есть следующая кодовая база: template class SomeClass { public: template void register_function(const...


По сути то, что я хочу - это передать ссылку функции-члена в другую функцию другого класса. Пример кода такой: #include using namespace std; class algorithm { void (*ODE)(double *...


Здравствуйте я хочу объявить указатель на функцию-член как данные под private scope и сделать getter для получения его из вне: class A { public: A(){ ptr = Foo;} // for example: ok void Foo(){ cout...


Пытаюсь сделать некоторые вроде этого: class A { void *(*func)(void *); A(void *(*function)(void *)){ func = function; } } class B { void *real_func(void *); A ptr; B() :ptr(&real_func) { ... }...


I have the following class: class Point2D { protected: double x; double y; public: double getX() const {return this->x;} double getY() const {return this->y;} ... }; Иногда мне нужно вернуть x...


Я бы хотел настроить указатель функции как член класса, который является указателем на другую функцию в этом же классе. Причины, по которым я это делаю, сложны. В данном примере я бы хотел, чтобы...


У меня объявлен указатель на функцию-член класса. Он и выдает error. #include using namespace std; class B { public: int b; void get() { cin>>b; } }; int main() { B b1 ; void...


У меня есть следующий класс: class Point2D { protected: double x; double y; public: double getX() const {return this->x;} double getY() const {return this->y;} ... }; И указатель на...


В одном из своих классов я включил указатель на функцию-член: private: void (class_name::*_pf)(double&, gc::mag::coefficient&, gc::mag::st&, const int&) const; Этот указатель либо...


Я хочу иметь член, который является указателем на функцию-член. Тогда я могу задать этот указатель на точку в одной из других функций-членов и использовать его для вызова функции очень хочется. По...



Чтобы изменить список, зарегистрируйтесь или войдите .

другие сообщества stack exchange

блог компании


Лучшие ответы получают голоса и поднимаются наверх


Вопрос задан
7 лет 6 месяцев назад


Изменён
7 лет 6 месяцев назад


11 1 1 золотой знак 2 2 серебряных знака 8 8 бронзовых знаков



Сортировка:


Сброс на вариант по умолчанию





Наивысший рейтинг (по умолчанию)


Дата изменения (сначала новые)


Дата создания (сначала старые)




Stack Overflow на русском

Тур
Справка
Чат
Связаться с нами
Оставить отзыв



Компания

Stack Overflow
Teams
Advertising
Collectives
Talent
О компании
Упоминания в СМИ
Соглашение
Политика конфиденциальности
Условия использования
Настройки файлов cookie
Политика о Cookie



Stack Exchange Network



Технологии




Культура и отдых




Жизнь и искусство




Наука




Специализация




Бизнес





API





Данные






Принять все файлы cookie



Настроить параметры


Stack Overflow на русском — это сайт вопросов и ответов для программистов. Присоединяйтесь! Регистрация займёт не больше минуты.
Здравствуйте! Мне нужно передать указатель на член-функцию объекта как аргумент в функцию. Знаю, как передать указатель на обычную функцию, а вот как на функцию объекта - нет. Подскажите, пожалуйста!
Передавать в фунцию, скорее всего, нужно не только адрес функции-члена, но и адрес объекта, иначе внутри фунции, куда передаем указатель, нельзя будет этим указателем воспользоваться. Так что с передачей двух указателей - на объект и функцию-член, будет примерно так:
Спасибо за ваш ответ на Stack Overflow на русском!
Также, обратите внимание на заметку в справочном центре о том, как писать ответы .
Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением , политикой конфиденциальности и политикой о куки

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2022.8.25.42913


Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie .



Чтобы изменить список, зарегистрируйтесь или войдите .

другие сообщества stack exchange

блог компании


Лучшие ответы получают голоса и поднимаются наверх


Вопрос задан
2 года 3 месяца назад


Изменён
2 года 3 месяца назад



 | 
Показать ещё 3 комментария



Сортировка:


Сброс на вариант по умолчанию





Наивысший рейтинг (по умолчанию)


Дата изменения (сначала новые)


Дата создания (сначала старые)




Stack Overflow на русском

Тур
Справка
Чат
Связаться с нами
Оставить отзыв



Компания

Stack Overflow
Teams
Advertising
Collectives
Talent
О компании
Упоминания в СМИ
Соглашение
Политика конфиденциальности
Условия использования
Настройки файлов cookie
Политика о Cookie



Stack Exchange Network



Технологии




Культура и отдых




Жизнь и искусство




Наука




Специализация




Бизнес





API





Данные






Принять все файлы cookie



Настроить параметры


Stack Overflow на русском — это сайт вопросов и ответов для программистов. Присоединяйтесь! Регистрация займёт не больше минуты.
Есть класс, внутри которого есть словарь Functions с парами: string : double(*)(double argument)
Помимо передачи обычных функций, нужно иметь возможность передавать туда указатель на метод этого же класса.
Со вторым пунктом появились проблемы, как известно, нет способа привести указатель на метод к указателю на функцию, поэтому вот как я поступил:
Мне казалось это красивым решением, но MSVS была со мной не согласна.
Говорила, что:Ошибка (активно) E0413 не существует подходящей функции преобразования из "lambda []double (double argument)->double" в "smp::Function"
Дело в том, что как только лямбда захватывает из внешнего контекста что-либо, такое преобразование перестаёт работать (дело именно в захвате, это я точно знаю). В данном случае нужно захватить указатель exp, чтобы вызвать у него метод getResult, который и нужно добавить.
Я решил пойти иным путём, а именно вот таким:
Подумал, может мне получится обойти это всё и сделать сначала лямбду, потом промежуточную функцию с нужной сигнатурой и вот её уже добавить в словарь.
Студия перестала меня ругать, это уже радовало. Делаю рантайм и получаю:
Ошибка C3497 нельзя сформировать экземпляр лямбда-выражения
Скажите, позволяет ли язык С++ решить мою проблему?
Как мне сделать так, чтобы в этот словарь можно было передать и указатель на метод, и на функцию?
Спасибо за ваш ответ на Stack Overflow на русском!
Также, обратите внимание на заметку в справочном центре о том, как писать ответы .
Необходима, но никому не показывается

Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением , политикой конфиденциальности и политикой о куки

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2022.8.25.42913


Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie .






c++ 

oop 

function-pointers 









Майк



источник





@jww и проверьте ответ CiroSantilli на этот вопрос, другие ответы более или менее не по теме. По сути, просто int (C :: * function_pointer_var) (int) = & C :: method; затем C c; и (c. * function_pointer_var) (2).





Йоханнес Шауб - litb


источник





Я знаю, что это старый, но не понимаю, как использовать. (a.*a.x)() Почему (a.*x)() не работает?


@gau, потому что x не входит в сферу действия


Мне приходится искать это каждый раз, когда я тоже им пользуюсь. Синтаксис сбивает с толку, но он имеет смысл, если вы его разберете. a.x является указателем на функцию-член класса A. *a.x разыменовывает указатель, поэтому теперь это ссылка на функцию. a.(*a.x) «привязывает» функцию к экземпляру (точно так же a.f ). (a.(*a.x)) необходимо сгруппировать этот сложный синтаксис и (a.(*a.x))() фактически вызывает метод a без аргументов.





Бертран Маррон


источник








Heto


источник








Джерри Гроб


источник








Сова


источник





Как определено, AFunc - это указатель на функцию-член, принимающую два целых числа и возвращающую вектор целых чисел. Но участники указали на возвращение int, верно? Я думаю, что оператор typedef должен быть typedef int (A::*AFunc)(int I1,int I2);





IllidanS4 поддерживает Монику


источник





Ты вдохновил меня, @ IllidanS4. Смотрите мой ответ. +1





мемта


источник








Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности .





Licensed under cc by-sa 3.0
with attribution required.



Блондинка с бритой киской в чулках и розовом корсете
Фото девахи с отвисшими сиськами у телефона
Винтажный минет зрелой женщины - Частное порно фото

Report Page