30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
|||||||||||
1 | |||||||||||
Передать метод, как параметр, в функцию19.04.2015, 11:09. Просмотров 1382. Ответов 6
Метки нет Все метки)
(
Добрый день.
Есть функция, которая должна в качестве параметра принимать указатель на метод класса. Причем сам метод может быть обычным, а может быть const. Вопрос: как написать, чтобы эта функция могла принимать и тот, и другой метод? Параметр типа:
Параметр типа:
А одновременно?
0
|
|
19.04.2015, 11:09 | |
Передать метод класса как параметр Как передать параметр в функцию? Функцию передать как параметр с++ Передать функцию как параметр |
|
![]() 1661 / 1033 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
19.04.2015, 12:02 | 2 |
По логике вещей, указатели на const-методы должны уметь безболезненно терять этот const в преобразованиях типов, аналогично тому, как типы данных могут его приобретать: в обоих случаях идёт ужесточение ограничений. Однако же в действительности такие указатели попросту неприводимы, так что самым простым и бескровным решением будет заводить перегрузки функций для обоих вариантов.
0
|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
||||||
19.04.2015, 12:39 [ТС] | 3 | |||||
Я об этом думал.
Но тогда внутри этих перегруженных функций нужно создать снова функцию, в которую нужно передать указатель на метод (const или простой). Исходный код содержимого перегруженных функций одинаков. Опять пришли к началу. Как в Qt сделан метод connect()? Он умеет принимать как const слоты, так и простые.
0
|
![]() 1661 / 1033 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
|
|
19.04.2015, 13:33 | 5 |
Если этого кода много, то можно вынести общие части (те, что не работают непосредственно с указателем) в отдельные функции и вызывать их из перегрузок.
Если немного, то будет две небольших одинаковых функции, не страшно.
0
|
30 / 8 / 2
Регистрация: 20.08.2011
Сообщений: 615
|
||||||
29.04.2015, 09:05 [ТС] | 6 | |||||
Покажите, пожалуйста, как это сделать.
Вот функция:
Содержимое тела функции не зависит от константности переданного метода.
0
|
![]() |
|
29.04.2015, 10:40 | 7 |
[progeR], спецификатор const входит в сигнатуру функции члена класса, поэтому нужно писать ваш код для обоих типов функций. Посмотрите к примеру как устроены функторы в стандартной библиотеке.
0
|
29.04.2015, 10:40 | |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь. Как передать параметр в функцию?
Можно ли передать указатель на функцию как параметр другой функции? г-но код или можно ли передать метку (от гоуту) в функцию как параметр? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |