Russian Qt Forum
Ноябрь 22, 2024, 17:45
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
С/C++
>
Специализация шаблонного метода
Страниц:
1
2
3
[
4
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Специализация шаблонного метода (Прочитано 25641 раз)
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Специализация шаблонного метода
«
Ответ #45 :
Февраль 19, 2016, 22:29 »
Цитата: kramer от Февраль 19, 2016, 22:24
Нет, не надо ля-ля.
Смотрите кому я отвечаю.
Цитата: kramer от Февраль 19, 2016, 22:24
Стандарт - это документ. Страниц на семьсот. В последнем принятом c++14 нет ни слова о частичной специализации шаблонных функций.
Да хоть на 100500.
Даже если эти слова появяться, то они будут просто словами, пока это не реализуют в компиляторах и наоборот.
И в нашем случае нет частичной специализации шаблонных функций, а есть перегрузка.
«
Последнее редактирование: Февраль 19, 2016, 22:34 от Old
»
Записан
kramer
Гость
Re: Специализация шаблонного метода
«
Ответ #46 :
Февраль 19, 2016, 22:39 »
Цитата: Old от Февраль 19, 2016, 22:29
Смотрите кому я отвечаю.
Оба-на, прошу прощения, недосмотрел.
Цитата: Old от Февраль 19, 2016, 22:29
И в нашем случае нет частичной специализации шаблонных функций, а есть перегрузка.
Есть. В нашем случае (т.е. в вашем коде) там есть и то и другое. Потому как переменное число шаблонных параметров у оператора сравнения. Это и есть частичная специализация, по определению. Полная - это template<>.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Специализация шаблонного метода
«
Ответ #47 :
Февраль 19, 2016, 22:42 »
Цитата: kramer от Февраль 19, 2016, 22:39
Есть. В нашем случае (т.е. в вашем коде) там есть и то и другое. Потому как переменное число шаблонных параметров у оператора сравнения. Это и есть частичная специализация, по определению. Полная - это template<>.
Это две совершенно разных функции с совершенно разными параметрами, не нужно проводить параллели с классами, их там по стандарту нет.
Спорить надоело, поэтому еще раз вернусь к разработчикам компиляторов: они все как один не считают это расширением. Если это не расширение, то это стандарт, если это стандарт, то это не частичная специализация.
«
Последнее редактирование: Февраль 19, 2016, 22:47 от Old
»
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Специализация шаблонного метода
«
Ответ #48 :
Февраль 19, 2016, 22:46 »
О, сколько нафлудили
Спасибо всем откликнувшимся за пред ложенные решения
Проблему в итоге решили в классе наследнике от TVector, который его специализировал.
И да, тупая древняя 2008 студия много чего не так понимает...
Что касается стандарта - считаю его во многих случаях уделом теоретиков. Реальный код все равно в итоге собирается конкретными компиляторами, и нам намного важнее то, как ту или иную вещь понимает отдельно взятый компиль и какой код генерирует по факту. А стандарт имхо сродни такому себе Hoch Deutsch - немецкий язык вроде как один, стандартный, да только в каждой земле все равно говорят по своему
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
kramer
Гость
Re: Специализация шаблонного метода
«
Ответ #49 :
Февраль 19, 2016, 22:54 »
Цитата: Racheengel от Февраль 19, 2016, 22:46
И да, тупая древняя 2008 студия много чего не так понимает...
Ох. Товарищ по несчастью. Сочувствую. Я с нее на 2012 только недавно перелез.
Цитата: Racheengel от Февраль 19, 2016, 22:46
А стандарт имхо сродни такому себе Hoch Deutsch - немецкий язык вроде как один, стандартный, да только в каждой земле все равно говорят по своему
Вот-вот. Поэтому, если вы хотите, чтобы вас поняли в любой земле, вы говорите на hochdeutsch, его вроде как в школе учат. Вы, помнится, что-то про переносимость говорили.
Записан
Old
Джедай : наставник для всех
Offline
Сообщений: 4350
Re: Специализация шаблонного метода
«
Ответ #50 :
Февраль 19, 2016, 23:00 »
Цитата: kramer от Февраль 19, 2016, 22:54
Вы, помнится, что-то про переносимость говорили.
Вот об это и речь. Стандарт есть, а переносимости все так и нет.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Специализация шаблонного метода
«
Ответ #51 :
Февраль 19, 2016, 23:17 »
Цитата: kramer от Февраль 19, 2016, 22:54
Ох. Товарищ по несчастью. Сочувствую. Я с нее на 2012 только недавно перелез.
Да сама то по себе 2008 студия как ИДЕ нормальная, мы ее для кодописания только и юзаем. Пробовали ИДЕ от 2013 - оказалось еще тем оцтоем. Реально используем компилятор от 2013 (а собираем через Qt креатор, т.к. проекты от 2008 студии она толком не может сконвертировать). Компиль классный в плане производительности - 20-25% прироста дает только так. Но есть и старые машины (у заказчиков), которым приходится собирать в 2008
Плюс под линухи у нас GCC и CLang, а это еще те ребята
Студия по сравнению с ними еще более-менее толерантна к коду.
Цитата: kramer от Февраль 19, 2016, 22:54
Вот-вот. Поэтому, если вы хотите, чтобы вас поняли в любой земле, вы говорите на hochdeutsch, его вроде как в школе учат. Вы, помнится, что-то про переносимость говорили.
Проблема только в том, что производители компиляторов трактуют стандарт по своему, так что переносимости как раз не получается
«
Последнее редактирование: Февраль 19, 2016, 23:19 от Racheengel
»
Записан
What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.
COVID не волк, в лес не уйдёт
kramer
Гость
Re: Специализация шаблонного метода
«
Ответ #52 :
Февраль 19, 2016, 23:47 »
Цитата: Racheengel от Февраль 19, 2016, 23:17
Проблема только в том, что производители компиляторов трактуют стандарт по своему, так что переносимости как раз не получается
Цитата: Old от Февраль 19, 2016, 23:00
Вот об это и речь. Стандарт есть, а переносимости все так и нет.
Есть она, есть. Не стопроцентная, конечно, от некоторых ифдефов никуда не денешься. Но если вы не буст пишете, то вполне можно свести их количество к минимуму. Лично мне правило "если этого нет в стандарте, вероятны грабли с переносимостью" сэкономило немало крови. Просто потому, что если что-то есть в стандарте, вероятность того, что оно будет работать одинаково на разных платформах несколько выше, чем если этого в стандарте нет. Истина выстраданная
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Специализация шаблонного метода
«
Ответ #53 :
Февраль 20, 2016, 11:26 »
Цитата: kramer от Февраль 19, 2016, 14:10
Ну распрекрасно, тогда для способа с ветвлениями в коде - как-то так:
...
Работать будет, но расширяемость никакая, если потребуется для какого-то из классов элементов переопределить логику
оператора сравнения контейнера
, то придется все эти else-if перелопачивать.
Цитата: Racheengel от Февраль 19, 2016, 14:40
Да, походу придется что-то такое и сделать, наверное. Выглядит, конечно, кривенько, но хотя бы ревью пройдет)
А чего это мы "носик воротим"?
Полагаю что главное (если вообще не единственное) соображение типа "ну это слишком просто, незатейливо" - и только
Ну какие "перелопачивания", откуда они возьмутся? Совать сюда сравнение объектов никто не собирался, они должны иметь оператор ==. А остальное ложится прекрасно
А вообще использование fuzzy в операторе == считаю неудачной идеей. Это "implicit" действие, за которое придется расплачиваться. Напр 2 контейнера float оказались равны. Но их double копии - уже НЕ равны. Лучше сделать fuzzy сравнение явным (explicit) добавив метод CompareFuzzy. Или, если этот класс в недрах др темплейтов, сделать специализацию всего класса <> и подчеркнуть это Fuzzy в его имени.
Записан
Страниц:
1
2
3
[
4
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...