![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
http://liveworkspace.org/code/bf8a2fa6241c...c42f3af3acb7ab2 Это сообщение отредактировал(а) Леопольд - 27.11.2010, 16:45 -------------------- вопросов больше чем ответов |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
Леопольд, помоему я написал тожесамое
Добавлено через 7 минут и 57 секунд Всем спасибо за участие, вопрос решен. --------- собственно ради чего это всё затевалось:
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
Не совсем, я показал что не так с static_cast ( mes показал тоже самое). Можно легко получить UB, компилятор ничем не сможет помочь.
вот ещё UB, компилятор проглотил не поперхнувшись
Надо написать шаbлон оbёртку, который включит типизацию оbратно. Это сообщение отредактировал(а) Леопольд - 27.11.2010, 19:59 -------------------- вопросов больше чем ответов |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
mes, зачем было городить такой сложный код, передали бы туда сразу int* например, оно бы вообще упало %)
предложите тогда лучший код, чтоб работал в гцц |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
так в этом случае Вы могли бы свалить на ССЗБ.. а тут вы вроде и метод правильно получили... да не тот.. Добавлено через 3 минуты и 20 секунд единственный безопасный способ получить void*_адрес метода.. это взять его у статической прокси функции.. (т.е. без лишних телодвижений увы никак).. |
|||
|
||||
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
поясню, этот код нужен чтобы передавать коллбэки на С++ в библиотеки с Си-интерфейсом.
естественно у function_with_callback будет в сигнатуре void() и void* и на каком-то этапе надо будет привести T* в void* кстати пожалуй более интересный вариант это
Добавлено через 4 минуты и 54 секунды mes, я не понимаю. вы написали
вторым аргументом function_with_callback может быть чтоугодно, по этому подразумевается что пользователь должен сам убедиться что если 1й аргумент это адаптер для T, то 2й аргумент имеет тип T* |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
в таком случае у Вас код не будет принимать для наследника, методы определенные в предке.. еще хуже - руки связаны.. Добавлено через 1 минуту и 30 секунд этот уже похож на нормальный.. нужно внимательней посмотреть.. |
|||
|
||||
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
вот тут вот надо обязательно использовать дополнительную переменную
этим можно воспользоваться, и написать вот так вот:
вроде это наиболее типобезопасный вариант Добавлено через 3 минуты и 24 секунды интересно правда как этот код вообще работает %) я не очень понимаю что есть rvalue-reference, и почему значение этой лямбды продолжает жить %) |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
мне кажется тут еще можно подумать.. Добавлено через 1 минуту и 7 секунд идти не в сторону получения пары, а предоставлении обертки над function_with_callback |
|||
|
||||
| GoldFinch |
|
||||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 15 Всего: 26 |
... и да, использование дополнительной локальной переменной делает всё совершенно неюзабельным =\
проблема в том, что она должна где-то жить, чтобы указатель на нее был валидным. а типичный пример использования это
Добавлено через 1 минуту и 18 секунд пара полезна тем что она гарантирует то, что оба агрумента взяты из одного источника, который может проверить их совместимость Добавлено через 4 минуты и 26 секунд это наиболее очевидный и понятный вариант, но мы его не рассматриваем. мне интересно создание одной реюзабельной функции которая позволила бы делать обертки для методов Добавлено через 12 минут и 11 секунд более того, есть случаи, когда написание обертки практически невозможно
|
||||
|
|||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну а что мешает сделать это проксю единой для всех подходящих функций ? Добавлено @ 00:28
ну еллипсис впринципе можно тоже разгрузить.. другой вопрос - нужно ли это.. Это сообщение отредактировал(а) mes - 28.11.2010, 00:34 |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот примерно о чем я предлагал (на основе вашего кода)
fcb - function_with_callback |
|||
|
||||
| Леопольд |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 943 Регистрация: 17.6.2009 Репутация: 10 Всего: 13 |
mes, думается, это надо для реального проекта. Навряд ли rvalue ссылки можно в нём использовать. Правда, ничто не мешает из заменить на оbычные...
-------------------- вопросов больше чем ответов |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
я их у тс перенял Добавлено @ 01:03 тем более они к теме напрямую не относятся.. и вопрос о надежности уже был также поднят тс.. но я например не в состоянии на него ответить.. поэтому пока беру как есть Добавлено @ 01:04 суть в самом вызове proxy, чтоб не приходилось в ручную заниматься "подбором" параметров.. Это сообщение отредактировал(а) mes - 28.11.2010, 01:05 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |