Как в макросе узнать, что компилятор под .NET 4.0?
От: catbert  
Дата: 17.09.11 16:45
Оценка:
Сабж.

Это чтобы можно было использовать типы нового рантайма.
Re: Как в макросе узнать, что компилятор под .NET 4.0?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.09.11 20:01
Оценка:
Здравствуйте, catbert, Вы писали:

C>Это чтобы можно было использовать типы нового рантайма.


Вопрос не очень грамотно сформулирован. Узнать о том что компилятор под дотнет 4 можно создавая проект макросов. Нельзя создать макросы для 3.5, а запускать их под 4.0.

Может быть речь идет об условной компиляции? Если так, то можешь задать в проекте рассчитанном на дотнет 4 специальный символ (например, DotDet4_0) и использовать его в #if. Ну, а в проекте для дотнет 3.5 и более ранних можно не задавать этот символ.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Как в макросе узнать, что компилятор под .NET 4.0?
От: YF Германия  
Дата: 17.09.11 20:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, catbert, Вы писали:


C>>Это чтобы можно было использовать типы нового рантайма.


VD>Вопрос не очень грамотно сформулирован.

Почему? Ты написал, что макрос StructuralEquality не реализует интерфейс IStructuralEquatable, а он существует только для 4-го фреймворка.
Поэтому вопрос резонный — если проект компилируется для .net 4, то тогда можно добавить интерфейс и его реализацию.
Если же это .net 3.5, то смысла добавлять IStructuralEquatable нет никакого.
Кстати, вопрос. В статье указано, что при реализации IEquatable для типов-значений также необходимо определять оператор ==.
Можно ли вообще определять операторы из макросов?
Re[3]: Как в макросе узнать, что компилятор под .NET 4.0?
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.09.11 22:52
Оценка:
Здравствуйте, YF, Вы писали:

VD>>Вопрос не очень грамотно сформулирован.

YF>Почему?

Потому что не ясно о чем идет речь. То ли о проекте в которых макрос содержаться, то ли о целевом проекте (где они используются).

YF>Ты написал, что макрос StructuralEquality не реализует интерфейс IStructuralEquatable, а он существует только для 4-го фреймворка.

YF>Поэтому вопрос резонный — если проект компилируется для .net 4, то тогда можно добавить интерфейс и его реализацию.
YF>Если же это .net 3.5, то смысла добавлять IStructuralEquatable нет никакого.

На сегодня компиляция для другого фрэймворка невозможна (хотя в ближайшее время, если Хардкейс не подведет, это должно измениться). Так что можно просто использовать символы препроцессора. В проекте компилятора и стандартных библиотек имеется символ NET_4_0. Его можно и проверять.

Когда добавим кросрантаймную компиляцию, добавим и свойство которое будет говорить для какого фрэймворка производится компиляция целевого проекта.

YF>Кстати, вопрос. В статье указано, что при реализации IEquatable для типов-значений также необходимо определять оператор ==.

YF>Можно ли вообще определять операторы из макросов?

Конечно можно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Как в макросе узнать, что компилятор под .NET 4.0?
От: Аноним  
Дата: 18.09.11 10:02
Оценка: +1
Здравствуйте, catbert, Вы писали:

C>Сабж.


C>Это чтобы можно было использовать типы нового рантайма.


Можно выполнить лукап означенных типов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.