LINUX.ORG.RU

История изменений

Исправление byko3y, (текущая версия) :

Зачем? Все макросы, которые мне пока что были нужны, сводятся к трем типам:

-- return or continue;
-- переменное число аргументов. Variadic templates во-первых нечитаемая срань, во-вторых серьезно ограничены в способностях, в том числе по причине следующего пункта;
-- сгенерить структуры данных|декларации типов на основе других. При том, что в C++ шаблоны принципиально плохо дружат с методами-полями классов и замыканиями, то есть, с любыми составными сущностями, и тот факт, что есть функторы, что можно создать нужную декларацию класса рекурсивным наследованием в шаблоне, эту проблему никак не отменяют, а лишь являются поводом не пытаться ее решать.

Но для этого не нужны макросы. Предлагаю продолжать список.

Есть отдельная проблема передачи куска кода аргументом, но она более-менее решается замыканиями, хотя это спорно. Ублюдочные итераторы C++, смоделированные по подобию циклов Си, возникли именно потому, что в C++ не было возможности сделать проход по нетривиальному контейнеру функциями этого контейнера — вместо этого проход делался вовне через вызовы примитивов, что дает весьма проблематичные затруднения для любого контейнера, отличного от «непрерывный массив значений», поскольку не всегда можно заставить внешний код правильно обращаться с твоими структурами.

Исходная версия byko3y, :

Зачем? Все макросы, которые мне пока что были нужны, сводятся к трем типам:

-- return or continue; -- переменное число аргументов. Variadic templates во-первых нечитаемая срань, во-вторых серьезно ограничены в способностях, в том числе по причине следующего пункта; -- сгенерить структуры данных|декларации типов на основе других. При том, что в C++ шаблоны принципиально плохо дружат с методами-полями классов и замыканиями, то есть, с любыми составными сущностями, и тот факт, что есть функторы, что можно создать нужную декларацию класса рекурсивным наследованием в шаблоне, эту проблему никак не отменяют, а лишь являются поводом не пытаться ее решать.

Но для этого не нужны макросы. Предлагаю продолжать список.

Есть отдельная проблема передачи куска кода аргументом, но она более-менее решается замыканиями, хотя это спорно. Ублюдочные итераторы C++, смоделированные по подобию циклов Си, возникли именно потому, что в C++ не было возможности сделать проход по нетривиальному контейнеру функциями этого контейнера — вместо этого проход делался вовне через вызовы примитивов, что дает весьма проблематичные затруднения для любого контейнера, отличного от «непрерывный массив значений», поскольку не всегда можно заставить внешний код правильно обращаться с твоими структурами.