powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получить ссылки на параметры колбека
15 сообщений из 15, страница 1 из 1
Получить ссылки на параметры колбека
    #39458631
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый.
Есть ли возможность стандартными средствами C++ 11 получить доступ из вне к параметрам callback? Ну, приблизительно ето будет выглядеть так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
void somefun (int param1, someclass1& param2, someclass2& param3 )
{
	//реализация функции
}

std::function<void(int, someclass1, someclass2)> fn1 = somefun;

void somefun2 ()
{
	//здесь надо получить доступ к аргументам param2 и param3 из callback'a fn1. 
        //Откуда етот callback будет вызыватся, параметры не видимы, а их надо зачистить перед вызовом
        //Что-то типа такого:
	auto& prm1 = param2 from fn1;
	auto& prm2 = param3 from fn1;
	localFunToClearData( prm1 );
	localFunToClearData( prm2 );
    fn1;
}


Собственно главный вопрос, как реализовать вот это:
Код: plaintext
1.
2.
	auto& prm1 = param2 from fn1;
	auto& prm2 = param3 from fn1


Также нужно узнать сколько вобще параметров у ф-ции, т.к. к этому callback могут биндится функции с разным количеством параметров, но не меньше обявленного в примере кода.
Заранее благодарю.
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39458707
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_raven,

То, что вы хотите, не имеет смысла (по крайней мере нет смысла в том коде который вы привели).
У вас есть экземпляр std::function. Для него можно получить только информацию о типах аргументов.
Значения аргументов получить нельзя так как там нет никаких значений.
Значения появляются в момент вызова этой функции, т.е. доступны только внутри колбэка.

Задайте вопрос по-другому, приведите реальный код, тогда может будет понятно, что вы на самом деле хотите.
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39458724
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,
Реальный код гораздо сложенее чем приведённый выше, и займет очень много места. Значения уже есть, и ф-ция биндится к fn1 с помощью bind
Код: plaintext
1.
fn1 = bind( &somefun, placeholders::_1, ref( param2 ), ref( param3 ) )


По сути мне нужен доступ не к значениям, а получить ссылку на уже существующий обьект param2, ссылку на который мы передали задолго до этого с помощью bind. Это можно как-то сделать?
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39458736
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_raven, что значит "зачистить параметры перед вызовом"? При вызове функции создается кадр стека по размеру переданных параметров, затем эти параметры инициализируются вызывающим кодом и после этого выполняется invoke с помещением в стек точки возврата. В i386, при вызове функции, на вершину кадра стека указывает регистр ebp, а esp указывает на сохраненные перед вызовом значения регистров и адрес возврата. Как только callback функция отработала, значения в кадре стека, с большой долей вероятности, инвалидны. Ты не мудри, а поясни, какой смысл во всех этих "приседаниях"?
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39458761
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenПо сути мне нужен доступ не к значениям, а получить ссылку на уже существующий обьект param2, ссылку на который мы передали задолго до этого с помощью bind. Это можно как-то сделать?
Нет. Нельзя. В типе возвращаемом std::bind нет доступа к информации о типах всего туда передано. Открытым остается только количество и типы входных аргументов (точнее интерфейса к этому нет, но это теоретически можно выяснить).
Про забинденную функцию и что в нее передано информации нет.
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39458768
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
prm2 i prm3 это классы, им надо вызвать сначала деструктор, а потом конструктор. Это eдинственная цель этого марлезонского балета. Вроде это кажется бессмысленным, но учитывая что эти аргументы хранят конфиг для определённой части проекта, который надо зачистить в определённый момент, и не факт что после этого колбек будет вызван, смысл это имеет (без конфига компоненты отрубаются). Т.е. мне нужны ссылки на все аргументы функций чтобы их зачистить(вызвать сначала деструктор, а потом конструктор).
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39458773
dj_raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky,

Всё, спасибо, вопрос можно закрывать. Будем реализовывать это через другое место :)
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39458804
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_raven, к кадру стека somefun можно получить доступ из somefun2 только если somefun в своей реализации вызывает somefun2.
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39458811
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_raven, экземпляры someclass1 и someclass2 передаются по ссылке. Следовательно, они уже где-то проинициализированы и любые не const методы экземпляров этих классов, вызванные с указанием ссылки на экземпляр, могут приводить к изменению переменных-членов этих экземпляров.
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39459187
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dj_ravenСобственно главный вопрос, как реализовать вот это:
Код: plaintext
1.
2.
	auto& prm1 = param2 from fn1;
	auto& prm2 = param3 from fn1


Также нужно узнать сколько вобще параметров у ф-ции, т.к. к этому callback могут биндится функции с разным количеством параметров, но не меньше обявленного в примере кода.


Это на каком же языке тебя учили программировать, если ты не можешь жить без такого извращения?

Ничего из этого невозможно в принципе.
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39459194
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv,

Учили его на ФохБазе.

Но проблема не в нем, а в черезжопном STL
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39459195
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglа в черезжопном STL
в этом мире есть что-нибудь хорошее?
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39459198
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А по моему, все на самом деле элементарно и смотреть на стандарты тут не надо. А надо смотреть на обычную и древнюю императивщину :)
Создаешь синглтон на основе map, в котором ключом будет имя функции. В самих функциях, чьи параметры надо знать из других функций вызваешь функцию сериализации в этот синглтон, а там где надо узнать - соответсвенно десериализуешь.
Все просто, легко и работает во всех языках где есть синтаксис функций и глобальных переменных.
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39459220
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилSiemarglа в черезжопном STL
в этом мире есть что-нибудь хорошее?
А все хорошее в этом мире либо аморально, либо приводит к ожирению (с) Анекдот
...
Рейтинг: 0 / 0
Получить ссылки на параметры колбека
    #39459481
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglНо проблема не в нем, а в черезжопном STL
Причем здесь STL, когда вместо дизайна кода - лапша в перемешку с костылями
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Получить ссылки на параметры колбека
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]