(Untitled)

May 13, 2009 12:32

 Всё-таки, стандарт С++ 99-го года попытался убрать сложность указателей, введя ссылки. И это здорово. К сожалению, они остановились на пол-пути. К сожалению, ссылка так и осталась недоделанной. Теперь я могу сказать об этом отчётливо, поскольку фреймворк, на котором я работаю, активно использует ссылки (ни одного new/delete в программе без потери ( Read more... )

Leave a comment

Comments 8

(The comment has been removed)

tozhe_skazo4nik May 13 2009, 13:14:37 UTC
Так я говорю о поддержке на уровне языка, а не о более или менее непереносимых хаках. Речь идёт о том, что для ссылки компилятор разворачивает вызов в простую функцию, а не виртуальную. Вопрос о том, можно ли такое сделать в принципе, не обсуждается - понятно что сделать можно.

Reply

(The comment has been removed)

tozhe_skazo4nik May 13 2009, 13:24:43 UTC
Идея ясна. Но речь всё равно не о том.
Простой вызов вида
iexample.Some();
должен разворачиваться в виртуальный вызов

Reply


(The comment has been removed)

tozhe_skazo4nik May 13 2009, 13:17:57 UTC
Она была для меня спорна в самом начале. Сейчас я пришёл к выводу что она обязательна. То что может провоцировать ошибки - безусловно, но на мой взгляд она решает проблем больше чем создаёт. Просто данная возможность получится, выражаясь словами самого Страуступа, "too expert-friendly".

Reply


(The comment has been removed)

tozhe_skazo4nik May 13 2009, 13:20:04 UTC
Согласен. Почему-то С++ не учится у D (а есть чему, на мой взгляд). Я бы сделал нечто подобное, но полностью в статике и без оверхэда (без виртуальных машин, динамического связывания и мусоросборщика) - абсолютно ненужных вещей при верном подходе.

Reply

(The comment has been removed)

tozhe_skazo4nik May 13 2009, 13:30:41 UTC
А что такое "compile-time рефлексия"?

По поводу сериализации - безусловно, жаль что не поддерживается. С другой стороны, эта возможность слишком зависит от реализации и платформы, чтобы быть переносимой и поддерживаться на уровне языка.
К слову, не удержусь чтобы не привести пример сериализации, как она выглядит во фреймворке У++ (я ничего лучше пока не видел):

//бинарная
struct Foo {
int q;
String text;
Vector data;

void Serialize(Stream& s)
{
s % q % text % data;
}
}

//XML
struct Data {
Size sz;
int lang;
String text;
Vector vector;
VectorMap score;
VectorMap map;
ArrayMap sizemap;
double number;
bool option;

void Xmlize(XmlIO xml)
{
xml
("Dimension", sz)
("text", text)
("vector", vector)
("Scores", score)
("map", map)
("sizemap", sizemap)
("number", number)
("option", option)
;
XmlizeLang(xml, "Language", lang);
}
};

Reply


Leave a comment

Up