LINUX.ORG.RU

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

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

если бы задача стояла так, что тебе было бы действительно удобнее сначала связать значения с переменными, и лишь потом с ними работать

потому я и требую конкретные задачи, а не попытку изобразить что-то бесполезное само по себе, т.к. во втором случае начинаются многочисленные «если бы» и претензии

в C++ пришлось бы писать бойлерплейт типа
В лиспе же это всё прячется в одно S-выражение, после чего код становится гораздо нагляднее.

template<class T, class U> inline
void bind_variables( T it, U& head ) {
    head = *it++;
}

template<class T, class U, class... Args> inline
void bind_variables( T it, U& head, Args... tail ) {
    head = *it;
    bind_variables( it++, tail... );
}

#define BIND( c, ... ) \
    decltype(c.begin())::value_type __VA_ARGS__; bind_variables( c.begin(), __VA_ARGS__ );

вам стоит подучить С++, вот вам готовый универсальный макрос для объявления и байндинга переменных из любого контейнера, ес-но его можно использовать и в MATCH, правда я так и не услышал ни одной реальной задачи, где вообще это было бы надо, зато наверняка услышу претензии по поводу данного решения

Исправление wota, :

если бы задача стояла так, что тебе было бы действительно удобнее сначала связать значения с переменными, и лишь потом с ними работать

потому я и требую конкретные задачи, а не попытку изобразить что-то бесполезное само по себе, т.к. во втором случае начинаются многочисленные «если бы» и претензии

в C++ пришлось бы писать бойлерплейт типа
В лиспе же это всё прячется в одно S-выражение, после чего код становится гораздо нагляднее.

template<class T, class U> inline
void bind_variables( T it, U& head ) {
    head = *it++;
}

template<class T, class U, class... Args> inline
void bind_variables( T it, U& head, Args... tail ) {
    head = *it;
    bind_variables( it++, tail... );
}

#define BIND( c, ... ) \
    { decltype(c.begin())::value_type __VA_ARGS__; bind_variables( c.begin(), __VA_ARGS__ ); }

вам стоит подучить С++, вот вам готовый универсальный макрос для объявления и байндинга переменных из любого контейнера, ес-но его можно использовать и в MATCH, правда я так и не услышал ни одной реальной задачи, где вообще это было бы надо, зато наверняка услышу претензии по поводу данного решения

Исправление wota, :

если бы задача стояла так, что тебе было бы действительно удобнее сначала связать значения с переменными, и лишь потом с ними работать

потому я и требую конкретные задачи, а не попытку изобразить что-то бесполезное само по себе, т.к. во втором случае начинаются многочисленные «если бы» и претензии

в C++ пришлось бы писать бойлерплейт типа
В лиспе же это всё прячется в одно S-выражение, после чего код становится гораздо нагляднее.

template<class T, class U> inline
void bind_variables( T it, U& head ) {
    head = *it++;
}

template<class T, class U, class... Args> inline
void bind_variables( T it, U& head, Args... tail ) {
    head = *it;
    bind_variables( it++, tail... );
}

#define BIND( c, ... ) { decltype(c.begin())::value_type __VA_ARGS__; bind_variables( c.begin(), __VA_ARGS__ ); }

вам стоит подучить С++, вот вам готовый универсальный макрос для объявления и байндинга переменных из любого контейнера, ес-но его можно использовать и в MATCH, правда я так и не услышал ни одной реальной задачи, где вообще это было бы надо, зато наверняка услышу претензии по поводу данного решения

Исправление wota, :

если бы задача стояла так, что тебе было бы действительно удобнее сначала связать значения с переменными, и лишь потом с ними работать

потому я и требую конкретные задачи, а не попытку изобразить что-то бесполезное само по себе, т.к. во втором случае начинаются многочисленные «если бы» и претензии

в C++ пришлось бы писать бойлерплейт типа
В лиспе же это всё прячется в одно S-выражение, после чего код становится гораздо нагляднее.

template<class T, class U> inline
void bind_variables( T it, U& head ) {
    head = *it++;
}

template<class T, class U, class... Args> inline
void bind_variables( T it, U& head, Args... tail ) {
    head = *it;
    bind_variables( it++, tail... );
}

#define BIND( c, ... ) decltype(c.begin())::value_type __VA_ARGS__; bind_variables( c.begin(), __VA_ARGS__ );

вам стоит подучить С++, вот вам готовый универсальный макрос для объявления и байндинга переменных из любого контейнера, ес-но его можно использовать и в MATCH, правда я так и не услышал ни одной реальной задачи, где вообще это было бы надо, зато наверняка услышу претензии по поводу данного решения

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

если бы задача стояла так, что тебе было бы действительно удобнее сначала связать значения с переменными, и лишь потом с ними работать

потому я и требую конкретные задачи, а не попытку изобразить что-то бесполезное само по себе, т.к. во втором случае начинаются многочисленные «если» и претензии

в C++ пришлось бы писать бойлерплейт типа
В лиспе же это всё прячется в одно S-выражение, после чего код становится гораздо нагляднее.

template<class T, class U> inline
void bind_variables( T it, U& head ) {
    head = *it++;
}

template<class T, class U, class... Args> inline
void bind_variables( T it, U& head, Args... tail ) {
    head = *it;
    bind_variables( it++, tail... );
}

#define BIND( c, ... ) decltype(c.begin())::value_type __VA_ARGS__; bind_variables( c.begin(), __VA_ARGS__ );

вам стоит подучить С++, вот вам готовый универсальный макрос для объявления и байндинга переменных из любого контейнера, ес-но его можно использовать и в MATCH, правда я так и не услышал ни одной реальной задачи, где вообще это было бы надо, зато наверняка услышу претензии по поводу данного решения