aleksej- → Комментарии
0
Шикарно ведь:

#undef TRUE
#define TRUE ((rand()%100)==0)
0
> Это решается вспомогательным классом а-ля traits и написанием методов с необходимыми
> количествами аргументов. Работа одноразовая. Если интересно, попробую сваять
> что-нить похожее на ваши макросы в свободное время.

Попробуйте, не вижу решения.
кто проговал на PROFT — 24 марта 2012
0
эт самый большой бред, но если ты тока начал задумываться от перехода юзверя в кодеры можешь попробовать.
C или Delphi — 23 марта 2012
0
А щас пишу на том к чему душа лежит.
0
Помнится в Компьютерре один из редакторов жаловался на такую-же проблему и хвастался её решением. Подними их архив, почитай. Номер давний, сейчас даже год не скажу.
0
#6 Абсолютно не согласен, что кодинг и игры одно и тоже. Из школьного курса по обществознанию: игра - деятельность человека, направленная на получение удовольствия от ее процесса. А программирование это либо труд, либо творчество, либо и то и другое сразу, что собственно и сказал #18 Никита DeviL Лисица.

Да программирование иногда бывает скучным и однообразным. Особенно когда чтото не получается или после того, как исправишь один баг, появляется другой!:) Я обычно пару дней ничего не пишу, а потом, со свежей головой, возвращаюсь. И мне нравится, что все именно так!
Ведь если бы все гроги писались без проблем, то это было бы уже не то программирование и не приносило бы такого удовольствия.
Сложно передать словами восторг и чувство собственного удовлетворения, когда после нескольких дней копания в мануалах, лазанья по форумам и чтения справки, твоя прога наконец то начинает работать нормально!:) А про тот таинственный блеск глаз в свете монитора я вобще молчу!;))
0
да
0
Оленька, я не говорил что вся проблема в дровах на видюху, просто сказал. что их лучше ставить с оффсайта. И систему ставить не какую-нить сборку а-ля Zver, а чистую, без вмешательств извне.
> я, конечно, нуб
Улыбнуло :)
0
Программеры на это могут ответить только "программируем за еду" ну и фотку соответственную нужно прикрепить :)
0
Или еще пример. Я очень хочу видеть в программе файл настроек в виде объекта с переменными string.

class Cfg {
``string a,b,c;
};

И что бы мне не писать в куче мест программы эти имена, я напишу макрос

#define CFG_TEMPLATE \
``ITEM(a) \
``ITEM(c) \
``ITEM(b)

Затем опишу класс

class Cfg {
``#define ITEM(X) string X;
``CFG_TEMPLATE
``#undef ITEM
``// Это развернется в string a; string b; string c;

``void load(cstring fileName);
};

Затем напишу метод загрузки

class NamePtr {
``const char_t* name;
``string* ptr;
};

void Cfg::load(cstring fileName) {
``// Формируем массив указателей и наименований
``std::vector<NamePtr> data;
``#define ITEM(X) data.push_back(NamePtr(#X, &X));
``CFG_TEMPLATE
``#undef ITEM
``// Это развернется в data.push_back(NamePtr("a",&a));
``// data.push_back(NamePtr("b",&b)); data.push_back(NamePtr("c",&c));

``// Дальше в data[n].name находятся наименования "a","b","c", а
``// в data[n].ptr указатели на строки a,b,c.
``// Ищем разделы с нужными именами и грузим данные в переменные.
}

Можно конечно в трёх местах написать имена (класс, переменные в методы загрузки и имена разделов). Другими словами - паттерн Copy&Paste. Или можно использовать массив (или хеш), но это медленнее и нет проверки на этапе компиляции.
0
я о томже, что гама-функции нет и следовательно без разницы какие у нас тут значения (целые или нет)
Куда идти учиться? — 19 марта 2012
0
на матмех , говорю же. Если ты в Алмате, то идешь в такую организацию под названием Светоч, если она еще там есть и поступаешь. Только учиться у нас сложно.
0
>> #define DECL(C) \
>Это просто шаблонный класс.
>> #define DECL1(NAME) \
>> #define DECL1x(NAME) \
>Это шаблонные методы.

Нет.

DECL, DECL1, DECL1x - это не просто шаблонный класс. Это шаблонный класс с произвольным кол-вом аргументов. Вот метод из этого класса:

class C {
``R operator() (AN) const {
````if(cls) return (cls->*method)(N);
````return (*fn)(N);
``}
};

AN - это один или больше методов через запятую, может быть "A0 a0" или "A0 a0, A1 a1"
и т.д. N - это "a0" или "a0, a1". Такого шаблоны не позволяют.

>> #define R void
>> #define RV
>> #define RVD return
>Дефайны для ключевых слов читабельности не добавляют. Да, писать меньше, но читать больше.

A,AN,N - это аргументы макросов DECL, DECL1, DECL1x, сразу после вызова DECL делается #undef. Я бы сделал передачу этих аргументов стандартным способом DECL(A,AB,N), но в качестве аргументов нельзя передавать запятые. DECL(A0 a0, A1 a0, ...)

>> Но можно написать в 19 раз короче:
>> #define DECLS \
> Что мешает сделать реализации по умолчанию? Или промежуточный класс (возможно шаблонный) с реализацией по умолчанию?

1) Это не избавит от необходимости в каждом .h файле писать новый метод.
2) Если сделать метод по умолчанию, то компилятор не будет проверять наличие метода в классе потомке - а это офигеть как удобно. Я компилирую программу, а мне компилятор говорит: "DbMssql::dropForeignKey не найдено". А мне надо только вписать код:

void DbMssql::dropForeignKey(cstring table, cstring id) {
``executeSql("ALTER TABLE \""+table+"\" DROP FOREIGN KEY \""+id+"\"");
}

В отличии от C# или Java, в С++ надо в .h файле (а их много) еще написать строку "void dropForeignKey(cstring table, cstring id);". Этот макрос меня освобождает от этой работы. Но это не главное, главное у меня нет 19-и файлов содержащих 95% идентичного текста. А это повышает наглядность программы.

> И, пожалуй, последнее...
> Вы пробовали зайти отладчиком в макрос?

Наглядность конечно от макроса зависит, но отладчик показывает состояние переменных и шагает как положено.
0
Можешь не напрягаться. Я лишь факты и примеры вам подкидываю, что бы было о чем подумать. Спорить у меня желания нет никакого.
0
Gnot HORONSON Kashenko

А как я выучу если даже пресдтавления не буду иметь что ето такое?