Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

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

Вот так можно привести лямбду/член класса в указатель на фунцию, НО, при компиляции для каждого отдельного такого вызова, должен быть задан уникальный 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; 16.08.2017 в 11:31.
alexzk вне форума Ответить с цитированием
Старый 16.08.2017, 23:15   #12
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

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

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

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

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача метода одного класса как параметр функции другого KemanSR Общие вопросы C/C++ 4 22.07.2015 21:20
Передача члена класса в другой класс Cerg1580 Общие вопросы C/C++ 0 20.12.2014 13: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 17:21