2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
1 | ||||||
Вызов const метод std::function01.12.2015, 12:58. Показов 2036. Ответов 9
Метки нет (Все метки)
Добрый день,
Как забиндить метод учитывая, что если будет const Foo foo вызывался другой. Не уж то будете советывать транзитный метод?
0
|
01.12.2015, 12:58 | |
Ответы с готовыми решениями:
9
Вызов функции-члена через std::function В std::function передать метод класса Error C2664: std::vector<_Ty>::push: невозможно преобразовать параметр 1 из 'double' в 'const std::string &' (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const& |
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
||||||
01.12.2015, 13:54 | 2 | |||||
Сообщение было отмечено rikimaru2013 как решение
Решение
Можно просто static_cast`ом привести к указателю на нужную функцию.
А можно и что-то поинтереснее придумать: Кликните здесь для просмотра всего текста
4
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|||||||||||
01.12.2015, 14:59 | 3 | ||||||||||
Сообщение было отмечено rikimaru2013 как решение
Решение
Я себе для подобных случаев такие вот вспомогательные штуки написал:
5
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
01.12.2015, 15:33 [ТС] | 4 | |||||
Кликните здесь для просмотра всего текста
Что-то у меня не получается автоопределить 81 и 82 строку.
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
01.12.2015, 16:31 | 5 |
0
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
01.12.2015, 16:45 [ТС] | 6 |
для автоопределения типа (более того модификатора const) надо написать промежуточный класс помощник, который через тот же
&Foo::f не поймет какой метод const/не const ему прислали в качестве параметра шаблона. 81 и 82 помогли классу helper это понять - и еще один helper опять же потребует 81 и 82 строку .
0
|
383 / 281 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
01.12.2015, 17:29 | 7 |
Почему в обоих случаях (const/non-const) в
std::function передается только get_value_t ? А если сделать std::function<get_value_const_t>(...) — то вообще ошибка компиляции
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
01.12.2015, 18:14 | 8 |
Если я правильно тебя понял, то тут слишком умного "автоопределения" быть не может, т.к. только программист в состоянии разрешить неоднозначность между перегруженными функциями. Поэтому тип функции должен быть указан явно (либо выведен явно из другого контекста). Но "само в себе" оно работать не будет.
Потому что std::function не учитывает этот const в параметре (у него даже специализации такой нет). Возможность вызова cv- или не cv-функции класса он определяет по cv объекта, который биндится.
1
|
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
|
01.12.2015, 18:24 [ТС] | 9 |
Так я вот и рыл в эту сторону скрыть реализацию автоопределения, и предоставить прозрачный лёгкий способ использования. Но блин камен на камне как начал копать ))))
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
01.12.2015, 18:32 | 10 |
0
|
01.12.2015, 18:32 | |
01.12.2015, 18:32 | |
Помогаю со студенческими работами здесь
10
Какая реализация лучше? std::pointer_to_binary_function vs std::function отсутствует оператор "<<" соответствующий этим операндам (std::ostream << const std::string) ошибка в программе (cannot convert 'std::string {aka std::basic_string<char>}' to 'const char*') Использование std::function в std::thread Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |