Указатель На Функцию Член
⚡ 👉🏻👉🏻👉🏻 ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻
Указатель На Функцию Член
Поделиться
Источник
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.
Блондинка с бритой киской в чулках и розовом корсете
Фото девахи с отвисшими сиськами у телефона
Винтажный минет зрелой женщины - Частное порно фото