Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Указатели на неименованные перечисления |
Автор: null56 1.3.2012, 14:18 | ||
Всем привет сейчас перечитываю книжку Вандервуда по шаблонам с++ и увидел одну непривычную для себя инструкцию http://reslib.com/book/Shabloni_S____Spravochnik_razrabotchika#132 указатель на неименованное перечисление ColorPtr Вопрос: что можно сделать с переменной такого типа, кроме как присвоить ей значение NULL
Ну и тогда побочный вопрос, уже по книге, с той же страницы куда и ссылка Автор пишет, что нельзя использовать в качестве аргументов шаблона неименованное перечисление, только когда они определены с помощью typedef. В приведенном в книге примере используется typedef, но всё равно автор пишет, что это ошибка... Чему верить? заранее благодарен всем откликнувшимся |
Автор: boostcoder 1.3.2012, 16:32 |
это лучшая строка в коде ![]() |
Автор: baldina 1.3.2012, 16:55 | ||||
в современном С++ кое-что можно http://liveworkspace.org/code/69321f31f4b2bfe36c0a66426c614108 Добавлено через 14 минут и 26 секунд borisbn, а почему не написать просто
|
Автор: borisbn 1.3.2012, 17:52 | ||
честно говоря, что то, что это выглядит паршиво. согласны ? а вот про такую конструкцию
не знал. век живи... как говорится)) |
Автор: null56 1.3.2012, 18:25 |
отличные ответы, спасибо |
Автор: boostcoder 1.3.2012, 19:44 | ||||
кто-нибудь, объясните, как это работает. я представляю то вместо auto тут должен быть decltype():
http://liveworkspace.org/code/9f1050e8f6d489757dc87286e11985cd |
Автор: k0rvin 1.3.2012, 21:56 | ||||
Элементарно: тип a_ptr -- ab_ptr_type ab_ptr_type -- указатель на элемент перечисления {a, b} => new auto(a) -- указатель на динамически созданное значение a из того перечисления. Обычный вывод типов, хотя тут выглядит как магия. |
Автор: boostcoder 1.3.2012, 22:19 |
для этого был создан decltype. а auto - тут как-то необычно смотрится.. |
Автор: k0rvin 1.3.2012, 22:34 | ||
decltype для вывода типов? auto тут вполне логично смотрится. |
Автор: borisbn 2.3.2012, 12:44 | ||||
а как тогда это работает ?
http://liveworkspace.org/code/f17ca1e0ea031496f9b0adeb80c7e800 ну, вообще-то, да. |
Автор: boostcoder 2.3.2012, 12:49 |
я решил не отвечать на это. |
Автор: k0rvin 2.3.2012, 15:31 | ||||||||
Точно также, только, поскольку тип слева неизвестен, то он выводится из выражения справа, в котором известен тип a - enum{a,b} Добавлено через 5 минут и 41 секунду
Судя по http://en.wikipedia.org/wiki/Decltype в вике, вообще-то нет. |
Автор: borisbn 2.3.2012, 16:27 | ||||||
Почему нет-то ? "Вывод" типа или "запрос" типа - ИМХО разные названия одного и того же. И почему тогда такая конструкция не работает
а такая - работает
нет... что-то в этом new auto не так... |
Автор: k0rvin 4.3.2012, 14:53 | ||||||
Потому что "вывод типа" и "запрос типа (у выражения)" -- принципиально разные вещи. Decltype берет тип от выражения, тип которого уже известен (задекларирован). auto же вычисляет тип выражения, тип которого, заранее неизвестен. Добавлено @ 14:55
Почему не работает? Ты же выше приводил код, где работает. |
Автор: boostcoder 4.3.2012, 15:06 |
неправда ![]() |
Автор: k0rvin 4.3.2012, 15:25 | ||
истинная правда. Добавлено через 37 секунд Ну разве что точнее "заранее неопределен" |
Автор: boostcoder 4.3.2012, 15:30 | ||
постыдились бы. auto, компилятор разворачивает как:
Добавлено через 1 минуту и 12 секунд это возможно только в ран-тайме. а с++ - не динамический язык. |
Автор: k0rvin 4.3.2012, 16:50 | ||||
"постыдились бы" http://en.wikipedia.org/wiki/Type_inference http://en.wikipedia.org/wiki/C%2B%2B11#Type_inference И никакой динамической типизации. |
Автор: boostcoder 4.3.2012, 17:19 |
так сами и прочтите о чем там пишут. |
Автор: k0rvin 4.3.2012, 17:21 | ||||||
Я-то прочел, а ты? Добавлено через 5 минут и 21 секунду Рекомендую для понимания обратить внимание на этот пример:
|
Автор: boostcoder 4.3.2012, 17:38 |
если Вы прочли, то что же Вы этим сказать хотели?: или Вы просто троллите? |
Автор: k0rvin 4.3.2012, 17:41 | ||
Я этим задал вопрос (знак вопроса '?' как бы говорит нам об этом). В вопросе содержался намек, что decltype — это не вывод типов, чтобы автор поста про decltype задумался. |
Автор: boostcoder 4.3.2012, 17:46 |
а что же это? |
Автор: volatile 4.3.2012, 17:49 | ||
k0rvin, в какой строчке тип заранее не известен? В С/С++ впринципе это невозможно. Просто по определению ![]() С/С++ язык со статической типизацией - и этим все сказано. |
Автор: boostcoder 4.3.2012, 17:51 | ||
http://stackoverflow.com/questions/6869888/the-relationship-between-auto-and-decltype или я "таво", или второе... Добавлено через 1 минуту и 38 секунд
я тоже пытался обратить его внимание на это. но после ответа, я уже начал сомневаться в себе ![]() |
Автор: k0rvin 4.3.2012, 17:55 | ||||||
Ты ведь не прочитал, что такое "Вывод типов", да? Хаскелл, *ML — тоже языки со статической типизацией. Добавлено через 1 минуту и 46 секунд
И тебе: вывод типов — это техника для статически типизированного языка Добавлено через 2 минуты и 39 секунд
т.е. ты не видишь разницу между decltype и auto? |
Автор: volatile 4.3.2012, 18:07 |
k0rvin, просто у auto и decltype разная семантика. auto чудес не совершает. В любом месте где стоит ауто, компилер точно знает какой именно тип туда нужно поставить. Причем знает это он в момент компиляции. |
Автор: k0rvin 4.3.2012, 18:08 | ||||||||||
Тип переменной a заранее не известен, он вычисляется из определения a = v[0]:
Зато тип b вычисляется из заранее типизированного выражения, decltype без всяких махинаций берет тип выражения v[0] и приписывает его переменной v. Т.е. суть в том, что тип переменной a определяется из выражения справа, а тип переменной b из выражения слева (decltype). Например, если изменить код примерно так:
то a определится как String и вообще строка с определением a будет работать, а стрка с определением b -- нет. Добавлено через 49 секунд
Хвала яйцам, кто-то это понял наконец-то. |
Автор: boostcoder 4.3.2012, 18:11 |
без decltype не существовало бы auto. auto реализован "поверх" decltype, с немного другой семантикой. но вывод типов - это decltype. |
Автор: k0rvin 4.3.2012, 18:11 | ||
Да, но он вычисляет (выводит) его (тип) из выражения справа например. Это позволяет не менять часть кода, типы которого зависят от других типов и их сложно определить однозначно. + уменьшает количество синтаксического мусора. |
Автор: boostcoder 4.3.2012, 18:18 |
т.е. ты целую страницу разводил демагогию из-за того что auto несколько изменяет семантику decltype, и просто ухмылялся что мы "не разглядели моську"? минусовать тебя за это. Добавлено @ 18:19 и разумеется ты не видел этого: |
Автор: volatile 4.3.2012, 18:20 | ||||
k0rvin, ну так и нужно было говорить именно так, согласитесь что: не совсем то, с чем можно согласиться... ![]() |
Автор: k0rvin 4.3.2012, 18:27 | ||
Это не вывод типов. Decltype требует явного указания выражения, от которого брать тип. Причем тип этого выражения должен быть явно определен. |
Автор: boostcoder 4.3.2012, 18:31 |
повторю в третий раз: |
Автор: k0rvin 4.3.2012, 18:48 | ||||||
Мда. Еще недавно ты не понимал как работает код на первой странице... Рекомендую переделать следующий код, чтобы он был без auto, и подумать, что будет с кодом проекта, порядка так 100к строк от подобной переделки.
Добавлено @ 18:49
Это и есть явное указание выражения. Так что ты сказать хотел? |
Автор: boostcoder 4.3.2012, 18:54 |
так вот компилятор делает тоже самое. неявно. я об этом в самом начале написал. специально для тебя объяснил это. чтоб исключить недопонимание. ![]() ты в танке? |
Автор: mes 4.3.2012, 20:17 | ||||
boostcoder, если быть точным, то не разворачивает.. auto и decltype реализуются дополняя друг друга , а не одно над другим.. Добавлено через 1 минуту и 57 секунд если взять ваш пример то то по сути правильно :
Добавлено через 3 минуты и 52 секунды при том на новом стиле записи функций это явно проступает
Добавлено через 5 минут и 22 секунды т.е. auto и decltype два рычага одного механизма, а не один и тот же рычаг под разным соусом ![]() |
Автор: boostcoder 4.3.2012, 20:41 |
mes, называйте как угодно. цель одна? auto выводит тип? Добавлено через 5 минут и 15 секунд нет. auto у нас нет. есть decltype и обертка над ним с несколько иной семантикой, реализующая auto. зы залезу я все же на stackoverflow... |
Автор: mes 4.3.2012, 21:14 |
нет, она говорит что для этого выражения тип будет определен позже ![]() "позже" это не рантайм )) |
Автор: boostcoder 4.3.2012, 21:19 | ||
ок. тогда, какую же роль выполняет auto в этом примере, и справедлив ли предполагаемый мной разворот auto?: и, что же на самом деле, означает выражение?:
|
Автор: mes 4.3.2012, 21:21 |
разница хороша видна на примере std::vector<auto> = f (); куда засунуть тут declexpr ? |
Автор: boostcoder 4.3.2012, 21:23 |
а этот код разве должен компилится? http://liveworkspace.org/code/fa66874e2d85fc4da5d7ae138ce15e71 |
Автор: mes 4.3.2012, 21:24 |
не совсем, ибо упускается из виду важный механизм о котором и говорил korvin.. умение определять тип , по выражению , которое определится позже.. |
Автор: boostcoder 4.3.2012, 21:25 |
зато с decltype все в порядке: http://liveworkspace.org/code/81fea29a4f587d224a1711b4de18e78e |
Автор: mes 4.3.2012, 21:27 |
должен (естественно f возвращает вектор, но не значение ), но увы не компилится.. будем ждать )) |
Автор: boostcoder 4.3.2012, 21:27 |
оно не позже определяется. это компилятор вместо auto вставляет decltype с несколько иной семантикой, именно для подобных случаев. ИМХО. но я все равно завтра поспрашиваю на stackoverflow. Добавлено @ 21:28 покажите, что конкретно Вы имеете ввиду? |
Автор: mes 4.3.2012, 21:31 | ||
это совсем другое.. вот тут примените decltype :
|
Автор: boostcoder 4.3.2012, 21:32 |
а этот код точно корректный? |
Автор: mes 4.3.2012, 21:34 |
еще раз на примере функции : auto // нельзя выведать тип результата операции над аргументами, f (int i, int j) // пока не определены аргументы.. -> decltype ( i+j) // а теперь уже можно.. { } |
Автор: boostcoder 4.3.2012, 21:36 |
мне кажется, auto в данном случае просто синтаксический сахар. ибо никакой иной роли оно выполнять не может. по тому, я и говорю, что auto - это decltype с несколько иной семантикой, именно для подобных случаев. зы может я не правильно вопросы задаю... |
Автор: mes 4.3.2012, 21:40 | ||
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1478.pdf |
Автор: boostcoder 4.3.2012, 21:42 |
я понимаю о чем там говорится. но я не понимаю почему.. |
Автор: mes 4.3.2012, 21:43 | ||||||
boostcoder, говорят что вывод типа и запрос типа имеют разное поведение, а не одно наследует другое.. |
Автор: boostcoder 4.3.2012, 21:48 | ||||
не? Добавлено через 1 минуту и 6 секунд как по мне, так запрос типа приводит к выводу типа. с несколько иной семантикой. Добавлено через 2 минуты и 1 секунду или?:
|
Автор: mes 4.3.2012, 21:50 | ||||
отдаленно соостветсвует такая запись :
но результат будет разный... плюс наличие value_type может не быть ![]() Добавлено через 3 минуты и 19 секунд покажите теперь для примера упомянутого выше
|
Автор: boostcoder 4.3.2012, 21:59 | ||
как его может не быть, если функция возвращает вектор?
|
Автор: mes 4.3.2012, 22:01 |
а что если кроме вектора ни к кому нельзя подобно применить авто ? см. пример с A ![]() Добавлено через 1 минуту и 5 секунд в случае с A<..> f () возвращает А<>.. |
Автор: boostcoder 4.3.2012, 22:02 |
опять не понял.. я же показал как разрулить его. |
Автор: mes 4.3.2012, 22:09 |
в случае с A<..> f () возвращает А<>.. как минимум, у Вас вместо А<int> будет А<А<int> >... |
Автор: newbee 4.3.2012, 22:10 | ||
Приведи аналог с decl. Я сейчас прочитала топик и совсем потеряла веру в бустика. Скажи, зачем хамить и поясничать перед человеком (корвин), который тебе забесплатно объясняет твою неправоту? И минусить в данном случае нужно совсем не его! |
Автор: boostcoder 4.3.2012, 22:17 |
хе! осталось понять, корректен ли этот код.. ньюбка, возможно ты считаешь свою веру эталоном? чтоб это назвать неправотой, нужно доказать другую правоту. а этого сделано не было. даже mes не смог. |
Автор: mes 4.3.2012, 22:23 |
пример с A запустите )) те механизмы, которые вручную придется добавить по дедукции типа и есть отличие auto от decla ![]() Добавлено через 1 минуту и 1 секунду по сути да ) |
Автор: boostcoder 4.3.2012, 22:30 | ||
http://liveworkspace.org/code/c800847632af73e27cc2efeabb2c6519
так а я две страницы что утверждаю?! ![]() Добавлено через 5 минут и 4 секунды сто процентное отличие auto от decltype, проявляется только в примере ньюби. |
Автор: mes 4.3.2012, 23:02 |
хмм.. это вы уже хакнули, упустив функцию... вы запустите с использование decltype (f(5)) ![]() тогда и получите вывод типа.. |
Автор: boostcoder 4.3.2012, 23:11 |
я об этом и говорил, говоря что "auto i = expr;" разворачивается в "decltype(expr) i = expr;", и дополнял, "это decltype с немного иной семантикой" испорченный телефон получился. |
Автор: newbee 4.3.2012, 23:18 | ||
Арррррррггггггггххххххххх бустик, ты этот пример видел? Семантика, семантика, семантика, даже в лиспосрачах столько раз бездумно про семантику не тяфкнут.
|
Автор: boostcoder 4.3.2012, 23:22 |
читай выше. |
Автор: mes 4.3.2012, 23:26 | ||||
какое отношение decltype имеет к нижеследующему коду ? :
|
Автор: volatile 4.3.2012, 23:30 |
Эй, господа. Вы что напали на человека? Ну хорошо, согласен, можно придумать какой-то изворот, где синтаксически нельзя вставить decltype, а auto можно. Ну и что? Что это доказывает? Разницы между ними принципиальной нет! Тип должен быть известен и точно определен, на момент компиляции данной единицы трансляции. И никак иначе. |
Автор: mes 4.3.2012, 23:42 | ||||
даже в таких условиях как широк простор действий ![]() Добавлено через 1 минуту и 3 секунды
дело не в извороте, а в концепции... Добавлено через 4 минуты и 20 секунд auto позволяет межеду выводом типом и запросом такая же разница как между специализацией и перегрузкой )) |
Автор: volatile 4.3.2012, 23:56 |
mes, Насчет утверждения бусткодера что ауто определяется через деклтайп, ничего говорить не буду. В принципе это внутреняя кухня компилятора, и да, скорей всего это не так, но дело в принципе не в этом. А вот с таким утверждением Согласиться не могу. Это чушь, причем абсолютная и полная. |
Автор: mes 5.3.2012, 00:05 |
с чем не согласны ? что тип в левой части выражения не известен ? если говорят "позже" это не значит что в рантайме.. в режиме компиляции есть тоже позже и раньше... ![]() |
Автор: newbee 5.3.2012, 00:05 |
Потому что ты просто не можешь понять, что тебе говорят. Не ты один и не в первый раз. Все зависит от того, что считать под "заранее неизвестная". Если "оставим это до рантайма", как, я думаю, ты это понимаешь, конечно это чушь, маразм и вообще. Но это маразм понимающего, а не объясняющего. |
Автор: volatile 5.3.2012, 00:30 |
Ну да, согласен, сначала нужно определить что понимать под термином, а потом уже спорить. а что под этим понимаете вы? |
Автор: mes 5.3.2012, 00:32 |
volatile,, грубо, означает что тип переменной определяется ниже по тексту .. ![]() |
Автор: volatile 5.3.2012, 00:44 | ||||
щас просмотрел ваши посты, и как назло, нигде не нашел, где именно тип определяется ниже по тексту. возможно конечно что-то пропустил ![]()
Везде тип определен, и определен строго выше. (ну или в той-же самой строчке) |
Автор: newbee 5.3.2012, 01:01 |
"Справа" по тексту это тоже "ниже". |
Автор: volatile 5.3.2012, 01:16 | ||
Подведем итоги Итак, к чему нас привела логическая цепочка:
Замечательно! Стоило ли разводить столько шума? ![]() Добавлено через 1 минуту и 36 секунд Кто бы с этим спорил ![]() |
Автор: mes 5.3.2012, 01:18 |
определены другие типых, а наш либо запрошен до/при определении ( при decltype(expr) val = expr ) либо выведен (auto) после определения... |
Автор: newbee 5.3.2012, 01:20 |
Шумел тут только один благородный дон по-моему, а целая бригада врачей пыталась его успокоить. |
Автор: mes 5.3.2012, 01:23 |
ну это вопрос к тем, кто сразу шуметь начал, вместо попытки понять сказанное ![]() Добавлено через 1 минуту и 30 секунд эта логическая цепочка было определена еще в самом начале разгорания шума, однако ж от дальнейшего его развития не спасла )) |
Автор: boostcoder 5.3.2012, 07:18 |
раз я задался этим вопросом, очевидно, что я не не знаю на него ответа. но три страницы примеров и "разговоров" которые никак не отвечают на вопрос, согласитесь, начнут раздражать любого. ибо это смотрится смешно. типа: "я умный. я тебе показываю. а ты дебил, не понимаешь." прошу прощения за грубость. но чем так "объяснять" - лучше молчать. не пришла бы ньюбка, еще бы несколько страниц вы мне "объясняли". спасибо. |
Автор: boostcoder 5.3.2012, 08:26 | ||
что-то тут не вяжется... Добавлено через 40 секунд а нет. их таки пять. |
Автор: boostcoder 5.3.2012, 09:35 |
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#625 поставим точку в примерах с auto в качестве параметра шаблона. еще "объяснения" будут? |
Автор: rumit7 5.3.2012, 09:36 | ||||||||||||
C++ 2011 (draft n3290), 7.1.6.4 auto specifier:
С "new auto(a)" по стандарту вроде все нормально, а вот на счет следующего кода у меня большие сомнения.
Во всяком случае в стандарте четко указаны случаи, где можно использовать auto. А вот пункт, легализирующий выше приведенный код, я не увидел: C++ 2011 (draft n3290), 7.1.6.4 auto specifier:
|
Автор: baldina 5.3.2012, 18:37 |
сколько интересного я пропустил... а уж сколько нового узнал ![]() кстати, насчет семантики. я (простите мою склонность к обобщениям и упрощениям) понимаю decltyte(x) как - "верни(подставь) тип выражения х". тип, естественно, известный (компилятору) в этой точке. a auto x=y - как "определи-ка сам тип выражения х по выражению y", т.е. еще неизвестный компилятору, но который компилятор может вывести. поэтому и конструкция была вида p=auto(x), но не decltype() ну и несколько магический вид, конечно, привлекает еще не пойму чего на k0rvin набросились. вот в случае определения типов при использовании шаблонов говорят о выводе типа (компилятором), однако это никого не смущает, никто не кричит что С++ статически типизирован. все и так ясно. |
Автор: volatile 6.3.2012, 00:12 | ||||
я просто думаю что здесь не совсем уместно слово неизвестный. Оно сбивает с толку. Допускаю что эту терминологию придумали не здесь, а кто-то "свыше спустил", но тем не менее, Если так рассуждать, то
Разве нет? оно находится справа по тексту, значит, согласно принятой ныне терминологии, оно неизвестно. Лучше называть вещи своими именами. вычисляет выражение стоящее справа по тексту - имхо, четко и ясно. |
Автор: mes 6.3.2012, 09:14 | ||
rumit7, в теме уже было написано, на текущий момент auto не предтавляет всех, тех возможностей, возложенных на него.. будем-с ждать ![]() но это не мешает рассуждать и сравнивать... спор по сути был не об auto, а о type querying и type deduction.. с отклонением на понятие "неизвестного на данный момент типа".. Добавлено через 5 минут и 2 секунды
просто когда речь касается "неизвестности типа" рассуждают с точки зрения конечного результата.. Тип же в конце концов становится известным компилятору ?значит известен.. И как аргумент приводят, ведь для вычисления все известно, значит и вычисленное заранее известно.. |
Автор: boostcoder 6.3.2012, 09:36 |
следующего стандарта? |
Автор: mes 6.3.2012, 09:44 | ||
здесь (с) с заранее определенным типом (инт) инициализируется результатом функции, выбранной в результате разрешения перегрузок по двум аргументам.. |
Автор: baldina 6.3.2012, 09:46 | ||
с этим никто не спорит. есть процесс вывода типа, проводимый компилятором. его может произвести и человек. когда мы пишем auto или вообще не указываем тип (в языках где это допустимо) мы просто ленимся. так же мы ленимся самостоятельно выводить новые факты из существующих фактов и правил, возлагая это на машину вывода (в БЗ, Пролог и пр.), т.е. поручаем машине черновую трудоемкую работу. везде, где отсутствует информация извне, результат заранее определен. только не всегда очевиден ![]() |
Автор: mes 6.3.2012, 09:46 |
тип будет вычислен по выражению стоящему дальше по тексту .. а раз будет, то на момент определения переменной он еще неизвестен, и подставляется чуточку позже, после того, как разберется с правостоящим выражением ![]() |
Автор: baldina 6.3.2012, 09:49 |
согласен, плохо. заменить на "не очевидный мне, мне лениво" ;) хотя все масло масляное |
Автор: mes 6.3.2012, 09:58 | ||||||||
если рассматривать конечную точку процесса, то да.. а взглянуть на компиляцию, как на процесс то, не важно кем делается вывод, человеком и компиляцией, мы можем сказать известен те ли на определенной момент времни или нет.. при этом проблема неизвестности встречалась в С++ и раньше, задолго до auto.. только почему то та неизвестность, никого не смущала ))
сейчас начнут призывать аргументы, что написанно не на одной строчке.. так и в статически типизированных языках auto тоже может быть написано не на одной..
т.е. объявляться с неизветным типом, и приобретать его в момент определения.. в конце концов тип x будет известен и его в любом случае нельзя менять.. Добавлено @ 10:02 неа.. в данном случае речь не о лени.. мы говорим какие правила использовать.. и вот правила как раз и разные для запроса типа и выведения.. Добавлено @ 10:03 ну или переходить на языки, на которых это уже есть )) Добавлено @ 10:08 вот опять.. в выражении "неизвестный тип" сам программист совсем не при чем.. речь о том кто разбирает код.. и встретив новую переменную и запомня ее, разборщик (будь он человек или машина) не может сразу проассоциировать его с типом, а идет дальше изучать след выражение.. Добавлено @ 10:12
так почему нельзя вывести тип правого выражения ? ![]() |
Автор: baldina 6.3.2012, 11:04 | ||||||
точнее, мы знаем правила и учитываем их. правила есть и они не меняются. а про различие запроса типа и выведения не оспаривается
два ответа. 1. потому что неограниченная рекурсия 2. можно, если использовать правило приведения типов в выражении + правило приведения неизвестного типа к известному
|
Автор: mes 6.3.2012, 11:14 |
так все таки неизвестного ? ![]() |
Автор: mes 6.3.2012, 14:50 | ||||
![]()
а если взглянуть на слово "правило" шире ? ![]() |
Автор: baldina 6.3.2012, 14:56 |
Автор: mes 6.3.2012, 16:34 |
угу, а неограчиность рекурсиии твердит нам об известности типа ![]() |
Автор: k0rvin 7.3.2012, 07:38 | ||
|
Автор: k0rvin 7.3.2012, 08:28 | ||||
Шум был не из-за этого, а из-за того, что некоторые утверждали, что "auto x = <expr>" можно однозначно заменить на "decltype(<expr>) x = <expr>". http://ideone.com/7xgiv.Пардон, пример уже приводили. |
Автор: boostcoder 7.3.2012, 08:54 | ||
просто я не мог поверить, что ты таки мог придраться к этому. ибо да, auto реализован поверх decltype но с иной семантикой. http://liveworkspace.org/code/092676eb3995f7890319ba83e7b42001 но обратное невозможно. |
Автор: mes 7.3.2012, 09:29 | ||
и даже не из этого... а auto это не иная семантика, а иная идеология.. которая к сожалению на текущий момент не отражена в С++ в полноте своей красоты ![]() |
Автор: boostcoder 7.3.2012, 09:39 |
я не фантазер и не ясновидец. то, что Вы мне приводили в пример - в с++ невозможно в рамках текущего стандарта. и не известно, изменится ли оно когда-либо. а так да, за примеры спасибо. они мне очень помогли, и главное - сэкономили мое время потраченное на объяснения невозможного ![]() |
Автор: mes 7.3.2012, 10:17 |
да фантазия тут не причем, есть два подхода для определения типа : auto i = 5 -> decltype (5); auto i = 5 -> deduct(5); и хотя они для простых случаех дают схожий результат, по сути они отличаются сильно.. и remove_ref не является сглаживателем различий.. подверждение этого явно отражено в стандарте.. Добавлено @ 10:20 а сходство между этими технологиями в следствии не развитости и ограниченности исполнения технологии.. |
Автор: k0rvin 7.3.2012, 10:29 | ||
typeid тебе тут не поможет: http://liveworkspace.org/code/ce69e09d185b85f157ecd01e399e6f18 Добавлено через 14 минут и 47 секунд А еще я могу просто взять и сделать бяку (кстати, при использовании в шаблоне компилятор требовал наличие typename перед remove_ref) и изменить смысл remove_ref: http://liveworkspace.org/code/39940580c7162f11f47cc35858fcd8ee Хотя, помнится в С++ как-то можно было запретить дописывать специализации шаблона в других единицах трансляции, пофиксишь свой код? |
Автор: boostcoder 7.3.2012, 10:49 | ||||
разве? и тут?:
Добавлено через 6 минут и 41 секунду
да, ступил. Добавлено через 8 минут и 13 секунд а я две. разговор-то не об этом. я не знаю как... |
Автор: k0rvin 7.3.2012, 11:01 |
[offtop]У меня одного такая фигня: http://itmages.ru/image/view/446952/70e4f141 ? Это при размере шрифта, отличном от 10pt. Firefox 8.0.1, WinXP SP3. |
Автор: borisbn 7.3.2012, 11:07 |
в Опере практически вообще не работает, а в хроме - при размере 11 и 12 - такая же фигня. при остальных размерах (9,10,14) - всё норм. |
Автор: boostcoder 7.3.2012, 11:08 |
когда-то был такой баг. но на опере... шрифт моноширный - на самом деле моноширный? или какой-то другой? Добавлено через 1 минуту и 16 секунд borisbn, там используется editarea. я пытался разобраться. но увы... если кто может помочь - договоримся. Добавлено через 3 минуты и 48 секунд кстати. проверьте на тесте от "производителя": http://www.cdolivet.com/editarea/editarea/exemples/exemple_full.html на каких браузерах/ОСях бажит? |
Автор: k0rvin 7.3.2012, 11:21 | ||||
Courier New, куда уж моноширинней, по скриншоту видно.
А тут у меня нормально отображает при любых размерах шрифта. |
Автор: boostcoder 7.3.2012, 11:24 |
хм... кажется я понял в чем дело) минут через 20ть исправлю. |
Автор: boostcoder 7.3.2012, 12:37 |
в опере - с любым размером шрифта все ок. в firefox`е - да. подтверждаю. |
Автор: borisbn 7.3.2012, 14:59 |
Опера: ![]() Хром - всё норм. http://liveworkspace.org/code/ce69e09d185b85f157ecd01e399e6f18 в Опере всё норм. В хроме ![]() у меня Windows 7 |
Автор: boostcoder 7.3.2012, 15:35 |
чудеса какие-то ![]() |