Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Взятие адреса перегруженного метода класса
|
|||
|---|---|---|---|
|
#18+
В шаблонную функцию нужно передать адрес перегруженного метода некоторого класса: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. А теперь нужно макрос signal переделать на шаблонную функцию с переменным числом аргументов. Как-то так: Код: plaintext 1. 2. 3. 4. 5. 6. Это заведомо неверно, но у меня даже идей не возникает как это сделать правильнее. А у вас идеи есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 11:16 |
|
||
|
Взятие адреса перегруженного метода класса
|
|||
|---|---|---|---|
|
#18+
petrav, Так? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Можете ещё глянуть в сторону std::result_of ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 13:20 |
|
||
|
Взятие адреса перегруженного метода класса
|
|||
|---|---|---|---|
|
#18+
NekZpetrav, Так? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Можете ещё глянуть в сторону std::result_of Увы. Выдаёт "error C3551: expected a trailing return type". Студия 2013. Если уж типа auto возвращаем, то можно так, наверное: Код: plaintext 1. 2. 3. 4. 5. 6. Но результат как и у меня раньше плачевный: error C2893: Failed to specialize function template 'unknown-type test::Signal(void (__thiscall t_class::* )(t_arguments...))'. Где он там неизвестный тип нашёл непонятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 13:39 |
|
||
|
Взятие адреса перегруженного метода класса
|
|||
|---|---|---|---|
|
#18+
petrav, Увы, на 14 стандарте это работает, на 11 нет, проверял на g++ 5.2.1 Можно попробовать так, decltype там не нужен, он нужен лишь для выведения типа из какого-либо выражения, как раз если trailing type вывести можно одним выражением. Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 13:59 |
|
||
|
Взятие адреса перегруженного метода класса
|
|||
|---|---|---|---|
|
#18+
А вообще, нахрена такое извращение, когда есть (std|boost)::function??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 14:04 |
|
||
|
Взятие адреса перегруженного метода класса
|
|||
|---|---|---|---|
|
#18+
NekZА вообще, нахрена такое извращение, когда есть (std|boost)::function??? А это система слотов и сигналов из Qt5, которая теперь аля boost::signals. Я её не упоминал напрямую, что бы расширить аудиторию обсуждения. :) Нам нужно только написать функцию Signal. Кстати, Ваш последний код откомпилировался. Спасибо. :) Я так понимаю, тут нельзя избавиться от повтора названия класса Foo? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 14:25 |
|
||
|
Взятие адреса перегруженного метода класса
|
|||
|---|---|---|---|
|
#18+
petravNekZА вообще, нахрена такое извращение, когда есть (std|boost)::function??? А это система слотов и сигналов из Qt5, которая теперь аля boost::signals. Я её не упоминал напрямую, что бы расширить аудиторию обсуждения. :) Совсем ни разу. Это хитрая и гибкая реализация функторов с возможностью частичного применения через std::bind. petravЯ так понимаю, тут нельзя избавиться от повтора названия класса Foo? Код: plaintext 1. Ну, если бы можно это было бы как-то завернуть в автовыведение типа, то наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 14:42 |
|
||
|
Взятие адреса перегруженного метода класса
|
|||
|---|---|---|---|
|
#18+
NekZpetravпропущено... А это система слотов и сигналов из Qt5, которая теперь аля boost::signals. Я её не упоминал напрямую, что бы расширить аудиторию обсуждения. :) Совсем ни разу. Это хитрая и гибкая реализация функторов с возможностью частичного применения через std::bind. Да нет же. Это я, формулируя исходную задачу, на самом деле описывал систему слоты-сигналы из Qt5. И возникшую с ними проблему. Думаю, std::function туда ну ни как не прикрутить. :) NekZpetravЯ так понимаю, тут нельзя избавиться от повтора названия класса Foo? Код: plaintext 1. Ну, если бы можно это было бы как-то завернуть в автовыведение типа, то наверное. Как это сделать у меня идей нет. :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 14:55 |
|
||
|
Взятие адреса перегруженного метода класса
|
|||
|---|---|---|---|
|
#18+
boost::signals2 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 21:15 |
|
||
|
Взятие адреса перегруженного метода класса
|
|||
|---|---|---|---|
|
#18+
alexy_blackboost::signals2 ? Да. Раньше в Qt это решали с помощью собственного макропроцессора + кодагенератора. Теперь вот добавили поддержку чистого С++. Даже макрос «slot» уже не обязателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.10.2015, 22:31 |
|
||
|
Взятие адреса перегруженного метода класса
|
|||
|---|---|---|---|
|
#18+
petravВ шаблонную функцию нужно передать адрес перегруженного метода некоторого класса: ... Это заведомо неверно, но у меня даже идей не возникает как это сделать правильнее. А у вас идеи есть? Код даже не читал. Если у тебя код шаблонный, то ты просто можешь без передачи адреса функции её вызывать по имени везде, где нужно. Компилятор сам её найдёт, а если не найдёт -- ругнётся. Это конечно, если делать это нужно исключительно в compile-time. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2015, 12:33 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39066492&tid=2018815]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 274ms |
| total: | 400ms |

| 0 / 0 |
