Здравствуйте, _FRED_, Вы писали:
H>>А для чего его использовать?
_FR>Когда требуемый тип не хочется забивать явно, ибо он однозначно определяется другими компонентами программы.
В такой постановке проблемы её решение уже имеется в языке — вывод типов.
Сделать такую штуку довольно просто. Но...
Для публичного интерфейса от этого только вред будет, так как появится зависимость между отдельными членами.
Ну, а для кода — это не нужно так как есть полноценный вывод типов. Он без участия программиста сам все выведет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
. Есть возможность прикрутить decltype?
VD>Сделать такую штуку довольно просто. Но... VD>Для публичного интерфейса от этого только вред будет, так как появится зависимость между отдельными членами. VD>Ну, а для кода — это не нужно так как есть полноценный вывод типов. Он без участия программиста сам все выведет.
1. И в декларациях [не публичных] членов класса?
2. Иногда компилятором выводится не совсем тот тип, что нужен и требуется явное уточнение, то есть указание типа.
Help will always be given at Hogwarts to those who ask for it.
. Есть возможность прикрутить decltype?
VD>>Сделать такую штуку довольно просто. Но... VD>>Для публичного интерфейса от этого только вред будет, так как появится зависимость между отдельными членами. VD>>Ну, а для кода — это не нужно так как есть полноценный вывод типов. Он без участия программиста сам все выведет.
_FR>1. И в декларациях [не публичных] членов класса? _FR>2. Иногда компилятором выводится не совсем тот тип, что нужен и требуется явное уточнение, то есть указание типа.
Дайте пример что ли.
Для начала ответьте на простом примере.
Какой тип у "x", а какой у "y" и почему ?
mutable x; // 1def y = 1 : TypeOf(x); // 2
x = 1.0; // 3
Здравствуйте, catbert, Вы писали:
C>Мне кажется, что внутри кода это можно сделать нехитрым макросом, а снаружи делать не стоит.
+1
C>Хотя, с другой стороны, в С++ оно не зря, так что надо подумать еще.
В С++ — это очередной костыль. Затыкают кривой дизайн языка.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: decltype?
От:
Аноним
Дата:
17.05.11 03:40
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, catbert, Вы писали:
C>>Мне кажется, что внутри кода это можно сделать нехитрым макросом, а снаружи делать не стоит.
VD>+1
C>>Хотя, с другой стороны, в С++ оно не зря, так что надо подумать еще.
VD>В С++ — это очередной костыль. Затыкают кривой дизайн языка.
В nemerle не меньший это работа с типами в макросах.
Я вижу как минимум два варианта — нельзя использовать выражения, тип которых ещё однозначно не вычислен или использовать "отложенное вычисление", то есть в данном случае тип "y" вычислять после того, как будет вычислен тип "х". При наличии циклов — посылать в лес.
Help will always be given at Hogwarts to those who ask for it.
Re[5]: decltype?
От:
Аноним
Дата:
17.05.11 06:02
Оценка:
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, _nn_, Вы писали:
__>>Для начала ответьте на простом примере. __>>Какой тип у "x", а какой у "y" и почему ?
_FR>
_FR>Я вижу как минимум два варианта — нельзя использовать выражения, тип которых ещё однозначно не вычислен или использовать "отложенное вычисление", то есть в данном случае тип "y" вычислять после того, как будет вычислен тип "х". При наличии циклов — посылать в лес.
тут решается граф
type y=type x
type x=float
первое вычислить мы не можем, поэтому пытаемся вычислить через унификацию второе
получаем x=float
далее ищим еще вариант который мы можем решить
это первая строка.
Здравствуйте, Аноним, Вы писали:
C>>>Хотя, с другой стороны, в С++ оно не зря, так что надо подумать еще.
VD>>В С++ — это очередной костыль. Затыкают кривой дизайн языка. А>В nemerle не меньший это работа с типами в макросах.
И что с ними не так?
В прочем, что-то я не вижу связи с вопросом темы. Кажется пошел какой-то флуд.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>В С++ — это очередной костыль. Затыкают кривой дизайн языка.
Да нет, не то что бы. Система типов С++ просто побогаче .НЕТ-ной. Допустим, есть два типа А и Б, и определен оператор (x : A) + (y : Б) = (z : В). Как выразить тип шаблона функции, которая возвращает сумму х и у? С помощью decltype.
Здравствуйте, catbert, Вы писали:
C>Да нет, не то что бы. Система типов С++ просто побогаче .НЕТ-ной. Допустим, есть два типа А и Б, и определен оператор (x : A) + (y : Б) = (z : В). Как выразить тип шаблона функции, которая возвращает сумму х и у? С помощью decltype.
C>В .NET просто так нельзя.
Тут дело не в системе типов, а в извращенческой логике которая выработалась в С++.
Если тебе нужно описать функцию, то и описывай ее в терминах типов:
A * B -> C
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: decltype?
От:
Аноним
Дата:
18.05.11 04:32
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Аноним, Вы писали:
C>>>>Хотя, с другой стороны, в С++ оно не зря, так что надо подумать еще.
VD>>>В С++ — это очередной костыль. Затыкают кривой дизайн языка. А>>В nemerle не меньший это работа с типами в макросах.
VD>И что с ними не так?
VD>В прочем, что-то я не вижу связи с вопросом темы. Кажется пошел какой-то флуд.
макросы до типизации, макросы после типизации.... получение типов выражений, но при этом нельзя получить тип функционального выражения и т д
Здравствуйте, Аноним, Вы писали:
А>макросы до типизации, макросы после типизации.... получение типов выражений, но при этом нельзя получить тип функционального выражения и т д
Не надо путать типизацию членов типов и типизацию тел методов — это два различных процесса. Когда говорят о выводе типов, то подразумевают второй процесс.
"Макросы до типизации" работают на стадиях BeforeInheritance и BeforeTypedMembers — до типизации членов типов..
"Макросы после типизации" вообще что-то непонятное. Есть лишь WithTypedMembers — этап, когда все сигнатуры членов типов вычислены и начинается типизация тел методов.
Что значит нельзя получить "тип функционального выражения"? Его получить можно точно также как и любой другой: typer.TypeExpr(...).
Здравствуйте, Аноним, Вы писали:
А>макросы до типизации, макросы после типизации.... получение типов выражений, но при этом нельзя получить тип функционального выражения и т д
Типизируешь выражение с помощью typer.TypeExpr() и получаешь тип. Единственная сложность заключается в том, что типизация бывает отложенная. Так что для некоторых случаев нужно свою обработку заворачивать в typer.DelayMacro().
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.