- 1
- 2
- 3
- 4
typedef typename _STD tr1::conditional<
_STD tr1::is_same<key_type, value_type>::value,
const_iterator,
_Tree_iterator<_Mybase> >::type iterator;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+32
typedef typename _STD tr1::conditional<
_STD tr1::is_same<key_type, value_type>::value,
const_iterator,
_Tree_iterator<_Mybase> >::type iterator;
Шаблоны на шаблонах и шаблонами погоняют.
USB 15.07.2012 14:46 # +1
Fai 15.07.2012 16:39 # 0
USB 15.07.2012 17:20 # +2
bormand 15.07.2012 17:59 # +3
anonimb84a2f6fd141 15.07.2012 18:12 # −4
Тайпклассы
.
bormand 15.07.2012 18:24 # +2
Это вы про меня? Тогда пример переделанного кода в студию. Он же простой, много времени у вас не отнимет ;)
anonimb84a2f6fd141 15.07.2012 18:40 # −6
http://www.haskell.org/ghc/docs/latest/html/libraries/base/Data-Traversable.html
http://www.scala-lang.org/api/current/scala/collection/Traversable.html
bormand 15.07.2012 19:10 # +7
Лолчто?
А для чего по-вашему служат итераторы? А они же, внезапно, и есть обобщенный интерфейс для обхода коллекций. Причем для языков, в которых без извратов не описать лямбду или хотя бы локальную функцию (привет Тарас), итераторы на порядок юзабельнее нежели traversable.
Теперь про коде reuse: в ваших любимых Хаскеле и Скале реализацию traverse и sequenceA пишет Александр Сергеевич Пушкин? Нет. Ее пишет автор контейнера, как и здесь. Использование conditional и is_same для вас тоже не code reuse?
TarasB 15.07.2012 20:58 # +8
TarasB 15.07.2012 21:36 # +6
bormand 15.07.2012 21:58 # +1
vistefan 16.07.2012 00:17 # +3
defecate-plusplus 16.07.2012 07:07 # +4
roman-kashitsyn 15.07.2012 23:06 # +1
Но достигнуто это такой архитектурой, по сравнению с которой код в топике - цветочки.
Впрочем, я пока не вижу пути, как применить имплиситы для достижения того-же эффекта.
USB 15.07.2012 18:33 # −1
Я это не вам. Просто тут
> Красивый, понятный код, в духе KISS, не находите?
некие Fai вспоминают "KISS (keep it simple, stupid — «не усложняй, тупица»)", мол типа можно сделать проще и тут же молчит, сосет и не делает проще.
Fai 15.07.2012 18:55 # −8
Чпок-чпок-чпок.
kipar 16.07.2012 14:10 # +1
А в С++ да, даже стандартная библиотека выглядит как говно.
roman-kashitsyn 16.07.2012 16:05 # +2
kipar 16.07.2012 16:06 # +2
defecate-plusplus 16.07.2012 16:35 # −1
> написал, как применить функцию поиска подмножества в контейнере с применением предиката
к чему это?
bormand 16.07.2012 16:40 # +1
>> Как-то так: R find(alias pred = "a == b", R, E)(R haystack, E needle)
>> А в С++ да, даже стандартная библиотека выглядит как говно.
> написал, как применить функцию поиска подмножества в контейнере с применением предиката
А где можно отсыпскачать исходники libastral, с помощью которого можно цитировать мысли собеседников, которых нет в постах?
defecate-plusplus 16.07.2012 16:52 # 0
bormand 16.07.2012 16:58 # 0
defecate-plusplus 16.07.2012 17:00 # +3
учитывая, что вышеприведенное им в одну строчку записывается через
boost::range::search(where, what, pred);
раз уж так не нравятся итераторы в
std::search(where.begin(), where.end(), what.begin(), what.end(), pred);
чем он хотел похвастаться, я даже в недоумении
USB 16.07.2012 23:38 # 0
kipar 17.07.2012 14:47 # +1
А в вашем boost\std как сигнатура search будет выглядеть?
Ага, как-то вот так: http://www.boost.org/doc/libs/1_50_0/libs/range/doc/html/range/reference/algorithms/non_mutating/search.html
Я даже не буду сюда копипастить этот ужас.
defecate-plusplus 17.07.2012 14:56 # 0
а в языке D равно это = или всё-таки ==?
kipar 17.07.2012 15:14 # +1
А в D - так как я привел. Ну и в теле компайл-тайм проверки на соответствие R, E и pred нужным типам.
defecate-plusplus 17.07.2012 15:18 # 0
компилятор D, встречая незнакомое слово, считает это шаблонным параметром-типом?
kipar 17.07.2012 15:30 # 0
kipar 17.07.2012 14:41 # +1
Но зачем она для поиске в мапе я не понял.
defecate-plusplus 17.07.2012 15:06 # 0
в с++ для этого тоже было предложение
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3329.pdf
не прижилось
поиск в мапе тут совсем не причем
приведен фрагмент из внутренней реализации std::set/std::map от MSVC - оба класса построены поверх внутреннего класса, реализующего к/ч дерево, и в какой то момент они, видимо, решают, как объявить итератор контейнера - как итератор этого внутреннего класса, или что-то более сложное
к вопросам чистоты синтаксиса - в редмонд
kipar 17.07.2012 15:08 # 0
А __traits(isSame, key_type, value_type) можно записать как
typeof(key_type) == typeof(value_type)
guest 17.07.2012 15:29 # 0
kipar 17.07.2012 15:31 # 0
USB 17.07.2012 21:41 # 0
Что это значит и чем мешает?
kipar 18.07.2012 10:22 # 0
TarasB 18.07.2012 10:30 # +1
defecate-plusplus 18.07.2012 10:40 # +3
в языке с прямым доступом в память даже без const_cast всегда можно найти адрес чего-либо и насрать туда, только где тут здравый смысл?
TarasB 18.07.2012 11:21 # +1
bormand 18.07.2012 11:35 # 0
> не защищён от записи на уровне железа
Да нет, не только. Еще претензия, что приходится дублировать код для итераторов и прочих псевдоуказателей.
TarasB 18.07.2012 11:38 # 0
defecate-plusplus 18.07.2012 11:43 # +1
Я сам обманываться рад!
сколько можно обсужать это толстое трололо "вменяемый фак"
bormand 15.07.2012 14:58 # 0
Fai 15.07.2012 16:39 # +1