33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
|
||||||
1 | ||||||
Шаблонные указатели на функции и их генерация26.04.2015, 14:53. Показов 5387. Ответов 8
Метки нет Все метки)
(
Здравствуйте!
Насколько я понимаю, не существует синтаксиса для объявления указателей на функции при помощи using. Однако typedef не поддерживает шаблонизацию. Мне нужно генерирование указателей на функции типа T(*func)(). Пока приходит только мысль о шаблоне структуры, внутри которой будет содержаться typedef. Что делать? Добавлено через 27 минут Что-то вроде такого:
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
26.04.2015, 14:53 | |
Ответы с готовыми решениями:
8
Шаблонные функции и указатели на функции шаблонные функции Шаблонные функции Шаблонные функции |
![]() 8719 / 4299 / 958
Регистрация: 15.11.2014
Сообщений: 9,744
|
||||||
26.04.2015, 15:00 | 2 | |||||
![]() Решение
вы ошибаетесь
http://rextester.com/WYA35567
2
|
Комп_Оратор)
![]() |
||||||
16.08.2020, 11:34 | 3 | |||||
Ураганная возможность, конечно. Но вот натолкнулся на проблемку. Сеть издолбил как мог - не нашёл. При использовании параметра по умолчанию происходит странная вещь. Для параметра
std::less<int> компилятор выводит аргумент типа std::less<int&> и это странно. Есть ли способ это победить?
0
|
Вездепух
![]() ![]() 10427 / 5697 / 1552
Регистрация: 18.10.2014
Сообщений: 14,059
|
|
16.08.2020, 12:16 | 4 |
Тип компаратора в данном случае задается через
decltype(*(It())) в строке 5. А decltype(*(It())) дает в результате ссылочный тип, если его аргумент является lvalue. Все, как и должно быть.
1
|
Комп_Оратор)
![]() |
||||||
16.08.2020, 12:19 | 5 | |||||
Это я понял. Я не понимаю как снять это прилипшее...
Мысль скачет вокруг вот такой вот ёлки :
![]()
0
|
Вездепух
![]() ![]() 10427 / 5697 / 1552
Регистрация: 18.10.2014
Сообщений: 14,059
|
|
16.08.2020, 12:20 | 6 |
![]() Решение
Какой-то дисбаланс треугольных скобок наблюдается. Внешний
decltype не нужен. std::remove_reference надо навесить снаружи на исходный decltype . Или, например, std::less<typename std::decay<decltype(*(It()))>::type> даст требуемый предикат с нессылочным типом.
1
|
Комп_Оратор)
![]() |
|
16.08.2020, 13:44 | 7 |
я делал разное, но до этого не дошёл. typename это уже акт отчаяния.
Спасибо, - попробую!
И ещё. Вопрос пока сыроват, но может выглядеть так. Указатель (его тип вернее) является параметром шаблона. А вот std::sort реализована в виде двух перегрузок... Выходит и мне придётся делать 2 перегрузки для метода принимающего указатель на конкретный инстанс sort (или stable_sort например). То есть один с итератором в шаблоне и с парой итераторов в аргументах, а другой ещё и с типом компаратара в шаблоне и объектом в аргументах...? Чуть сумбурно, но если не понятно, поясню.
0
|
248 / 70 / 9
Регистрация: 22.07.2018
Сообщений: 321
|
|
16.08.2020, 18:03 | 8 |
Или, как пишут нормальные люди:
std::less<typename std::iterator_traits<It>::value_type> .
0
|
Комп_Оратор)
![]() |
|
16.08.2020, 19:23 | 9 |
Как психиатр психиатру:
std::less<typename std::iterator_traits<It>::value_type> я верю, что с точки зрения стандарта, это лучше. Но слов больше.
0
|
16.08.2020, 19:23 | |
Помогаю со студенческими работами здесь
9
Шаблонные функции Шаблонные функции Шаблонные функции Шаблонные функции Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |