Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.129.211.173] |
|
Страницы: (56) 1 2 [3] 4 5 ... 55 56 ( Перейти к последнему сообщению ) |
Сообщ.
#31
,
|
|
|
Создать где? В шарпе вроде как в интерфейсах вообще полей не можкт быть - только методы. А если ты имеешь ввиду IFoo tmp = new Derived(), то да, конечно. |
Сообщ.
#32
,
|
|
|
Цитата D_KEY @ Можно попытаться ответить на этот вопрос. Рассмотрим код:Но зачем же наделять интерфейсы свойствами абстрактных базовых классов? Так, пожалуй, их проще реализовать. Но это не аргумент. interface IFoo { void g(); } class Base { void g(); } class Derived : Base, IFoo { } ... IFoo b = new Derived; b.g(); Добавлено Цитата OpenGL @ Да, я это имел ввиду. Но смотри выше. А если ты имеешь ввиду IFoo tmp = new Derived(), то да, конечно. |
Сообщ.
#33
,
|
|
|
Цитата applegame @ Ну и как компилятор должен выкручиваться из такой ситуации? Выдать ошибку компиляции Ты же не указал, что Derived реализует IFoo. |
Сообщ.
#34
,
|
|
|
Кажется, вспомнил. alias как-то странно работает с ref. foreach (ref int x; arr) не тоже самое, что alias ref int ref_int; foreach (ref_int x; arr) http://ideone.com/zbUG0A При этом ref является частью типа функции, например. |
Сообщ.
#35
,
|
|
|
Цитата OpenGL @ Я уже поправил Выдать ошибку компиляции Ты же не указал, что Derived реализует IFoo. Добавлено Цитата D_KEY @ Ситуация со ссылками в D мне тоже не нравится. ref почему-то не является частью типа. Например, нельзя создать переменную-ссылку. Не знаю зачем так сделали, но мне не мешает. При этом ref является частью типа функции, например. |
Сообщ.
#36
,
|
|
|
Цитата applegame @ Ситуация со ссылками в D мне тоже не нравится. ref почему-то не является частью типа. Например, нельзя создать переменную-ссылку. Не знаю зачем так сделали, но мне не мешает. Так а чего он не ругается на alias с ref, а просто делает какую-то фигню? И почему ref является частью типа возвращаемого значения? |
Сообщ.
#37
,
|
|
|
Цитата D_KEY @ А почему фигню? "alias ref int ref_int;" полностью аналогичен "alias int ref_int;" сейчас уже, кстати можно писать "alias ref_int = int;".Так а чего он не ругается на alias с ref, а просто делает какую-то фигню? Цитата D_KEY @ Нет, не является. Скорее это некий флажок для компилятора. Если функция возвращает ссылку и ты ее присвоишь переменной с типом auto, то будет создана обычная переменная, а не ссылка.И почему ref является частью типа возвращаемого значения? Но вообще, я согласен с тобой, и в свое время задавал аналогичные вопросы на оффоруме. Там сказали, что-то вроде - ну вот так сделано. ref также не являясь частью типа умудряется все же быть частью сигнатуры функции С другой стороны, как я уже сказал, это не мешает и представляет скорее академический интерес, чем практический. Окай. Перейду к другой части мерлезонского балета. А именно, возможность использовать строковые литералы (и вообще любые строки вычисляемые compile-time) в шаблонах. В качестве стратегий: http://dpaste.dzfl.pl/adb455e76a45 В качестве предикатов: http://dpaste.dzfl.pl/30cb1cd23e26 Добавлено На всякий случай сообщаю, что class Container(string type) { } template<string type> class Container { }; |
Сообщ.
#38
,
|
|
|
Чего окай-то? мне вот подобных косяков со ссылками и интерфейсами уже достаточно. Наверняка там ещё есть
|
Сообщ.
#39
,
|
|
|
Цитата D_KEY @ Ну а что дальше? Этот вопрос рассмотрен и закрыт или у тебя еще есть вопросы? Кстати ты не ответил на пост про интерфейсы.Чего окай-то? Цитата D_KEY @ С интерфейсами - это не косяк. Если ты к чему-то привык, то это не значит, что так и должно быть. В каждом языке свои особенности.мне вот подобных косяков со ссылками и интерфейсами уже достаточно. Наверняка там ещё есть Что касается других косяков, то там их достаточно. Но тем не менее, почему-то меня не тянет назад на плюсы. |
Сообщ.
#40
,
|
|
|
Далее, обещаный compile-time reflection, шаблонная функция printMembers печатает имена и значения членов структуры, переданной в качестве аргумента.
import std.stdio; struct Foo { int i; string s; float f; } void printMembers(T)(T t) { foreach(identifier; __traits(allMembers, T)) { writefln("%s = %s", identifier, mixin("t." ~ identifier)); } } void main() { Foo f = Foo(1, "test", 0.5); printMembers(f); } результат - http://dpaste.dzfl.pl/be97ba78d54f Добавлено Цитата D_KEY @ Кстати, не согласен с этим категорически. Приведи пример проблемы, которая решается включением/выключением/заменой куска исходников, и которую нельзя решить способом предлагаемым в D, но можно системой сборки. Так эти задачи и должна решать система сборки В языке это смотрится как излишек. Да и всех проблем не решить заранее в языке. |
Сообщ.
#41
,
|
|
|
является. interface - ключевое слово
Это ссылка. Почему нет? Добавлено Цитата applegame @ Так и препроцессор в C/C++ встроен в язык. В D например для компиляции под разные ОС, не нужно никаких внешних инструментов, все встроено в язык |
Сообщ.
#42
,
|
|
|
Цитата trainer @ Ну и как при помощи только лишь препроцессора узнать тип ОС? Так и препроцессор в C/C++ встроен в язык. |
Сообщ.
#43
,
|
|
|
Никаких преимуществ перед библиотечными, одни минусы: ни хэш не задать, ни аллокатор. Чем он так идеален, что в мире плюсов нет ничего похожего? Эти !() просто ужасны и нечитаемы. Следовало идти по пути Scala. И да, что такое "мощный синтаксис" - моя не понимайт. Костыль при отсутствии множественного наследования. Цитата applegame @ отсуствие необходимости в заголовочных файлах (это свобода, вы плюсовики, просто не знаете как это прекрасно) Пишу на C#, Java, C++, Objective-C - я люблю заголовочные файлы. ЧЯДНТ? Цитата applegame @ Настоящая условная компиляция в зависимости от ключей в командной строке, процессора, кода, версии и т.п. Препроцессор не менее настоящий. Но то, что static if - часть языка, что плюс, да. Цитата applegame @ настоящий CTFE, вплоть до compile-time импорта в строку и парсинга файла в код на D Парсинг из строки - это убожество. Александреску преподносит это как манну небесную, но мне абсолютно непонятно для чего использовать строки, если нужно записывать код - должна быть нормальная возможность описать AST в стандартном синтаксисе языка, как это сделано в макросах Nemerle. Как и было доказано, они не нужны. Цитата applegame @ нормальные лямбды, тип которых зависит напрямую от сигнатуры, а не как компилятор на душу положит. Кроме того имеется прекрасный сокращенный стиль их написания Т.е. встроенная в язык std::function, но опять таки без возможности параметризации аллокатором. А т.к. тип зависит только от сигнатуры, то прощай тотальное встраивание. Не нужно. Есть и в C++11. Другое дело, что в D надо наоборот указывать тот факт, что переменная глобальная - в этом плюс есть, да. Полезно. Вроде как обсуждается к C++17. Он не то, что не самый продвинутый...Он самый убогий Потому что для такого языка возможен лишь консервативный сборщик. Сейчас используется boehmgc... который вообще-то для C/C++ А в итоге в D наличие сборщика привёло к большой путанице с деструкторами и переопределёнными new/delete - это fail. Вообще, D протух ещё до выхода. Когда-то давно я тоже в него верил, но потом разочаровался и понял: D - это говно, очень вонючее говно. Многие из тех, то его тогда поддерживал, сейчас смотрят на Rust или Go. D_KEY, помнишь, ты даже хотел на форуме подраздел создать, чтобы обсудить D? Посмотрел по личным сообщения - 2009 год был Ну, и правильные посты про D. |
Сообщ.
#44
,
|
|
|
Цитата applegame @ Вот так: http://msdn.microsoft.com/en-us/library/b0084kay.aspxНу и как при помощи только лишь препроцессора узнать тип ОС? http://gcc.gnu.org/onlinedocs/cpp/System-s...edefined-Macros |
Сообщ.
#45
,
|
|
|
Цитата MyNameIsIgor @ Objective-C Как оно, кстати? |