Форум программистов
Реклама:
Гарантия безопасности сети с UTM-системой ИКС.
Защита ПД, межсетевой экран, контроль доступа, фильтрация трафика, система предотвращения вторжений.
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый Вчера, 12:16   #11
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 436
Репутация: 93
По умолчанию

Вот так можно привести лямбду/член класса в указатель на фунцию, НО, при компиляции для каждого отдельного такого вызова, должен быть задан уникальный ID, так что компилер генерит уникальную статик обвертку

https://github.com/alexzk1/astroed/b...rc/callbacks.h

Пример использования вот (лямбда, как указатель на функцию)

Код:

 auto reader = [&src, &done](lua_State *L,
                          void *data,
                          size_t *size) -> const char *
            {
                (void)L;
                (void)data;
                const char* r = (done)?nullptr:const_cast<Src*>(&src)->data();
                *size = src.size();
                done = true;
                return r;
            };

            return lua_load(state.get(), reinterpret_cast<lua_Reader>(lambdacb::to_callback<LUA_UNIQUE_CB_BEGIN + 1>(reader)), nullptr, chunkName.c_str(), mode.c_str());

Если у вас не обязательно получать указатель на функцию, т.е. вы это контроллируете, можно сделать так:

Код:


class B
{
public:
void member_func(int);
}
using some_func_type = std::function<void(int)>;

some_func_type func = std::bind(&B::member_func, b_object_ptr, std::placeholders::_1);
func(5);

Мембер-функция всегда принимает первым параметром указатель на объект класса (this), отсюда b_oject_ptr в параметрах. Да, и следить нужно, чтоб объект класса Б существовал дольше, чем этот bind.

Последний раз редактировалось alexzk; Вчера в 12:31.
alexzk вне форума   Ответить с цитированием
Старый Сегодня, 00:15   #12
_Bers
Профессионал
 
Регистрация: 16.12.2011
Адрес: Москва
Сообщений: 2,004
Репутация: 814
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Мембер-функция всегда принимает первым параметром указатель на объект класса (this)
ложь.
_Bers на форуме   Ответить с цитированием
Старый Сегодня, 03:45   #13
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 436
Репутация: 93
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
ложь.
уболтали, кроме статик мемберов, но тогда на нее возьмется и указатель...и вообще проблемы не будет.
alexzk вне форума   Ответить с цитированием
Старый Сегодня, 07:02   #14
Croessmah
Вредный кошак
Профессионал
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Адрес: г. Инза
Сообщений: 1,074
Репутация: 362
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
кроме статик мемберов
Нет, не только.
Как будет передан this в функцию - не определено.
Это ключевое слово, и является оно prvalue expression,
хотя компиляторы упрощают себе жизнь, сделав его неявно
параметром функции в виде константного указателя,
на чем их иногда ловят, и пишут на багтреккер. )))

Последний раз редактировалось Croessmah; Сегодня в 08:37.
Croessmah на форуме   Ответить с цитированием
Старый Сегодня, 17:22   #15
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 436
Репутация: 93
По умолчанию

ну такое себе "иногда", что аж не встречал еще иного поведения) - первый параметр - неявный this.
Даже таскал из дллок не экспортируемые процедуры...ну типа в либе какойто там класс свой, и функции туда-сюда внутри кидаются ссылками, но мне нужна именно такая, не экспортируемая - вот и вытаскивал, вызывая напрямую конструкторы "чегото", на мою память, потом передавал ее первым параметром в мемберы.
alexzk вне форума   Ответить с цитированием
Старый Сегодня, 22:19   #16
_Bers
Профессионал
 
Регистрация: 16.12.2011
Адрес: Москва
Сообщений: 2,004
Репутация: 814
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
ну такое себе "иногда", что аж не встречал еще иного поведения)
не имеет значения, что именно вы встречали, а что - нет.

Цитата:
Сообщение от alexzk Посмотреть сообщение
- первый параметр - неявный this.
ложь.
_Bers на форуме   Ответить с цитированием
Ответ



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача метода одного класса как параметр функции другого KemanSR Общие вопросы C/C++ 4 22.07.2015 22:20
Передача члена класса в другой класс Cerg1580 Общие вопросы C/C++ 0 20.12.2014 14:13
передача функции в конструктор класса Kukurudza Общие вопросы C/C++ 6 04.12.2011 08:31
передача типов из класса в класс badmfck Общие вопросы Delphi 10 24.05.2010 12:31
Передача ссылки в функцию класса на данный класс Impuls1989 Общие вопросы C/C++ 17 09.01.2010 18:21




23:24.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru