Re[3]: поддержка кортежей на уровне языка
От: Evgeny.Panasyuk Россия  
Дата: 17.02.13 04:27
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Может как-то так гуманнее?


CS>#define $get(TT,I) std::get<I>(TT)


сильно отличается от синтаксиса в первом сообщении, да и длиннее на 5 символов.

CS>#define $length(TT) std::tuple_size<decltype(TT)>::value


согласен, про decltype для это цели я уже потом подумал.

P.S. А вообще меня и обычный синтаксис не напрягает. Тем более tuple не так часто нужны.
Например, если это тип возврата функции (тем более не лямбды) — то тут не трудно и обычную структуру объявить. Названия полей будут служить документацией, да и вызывающий код будет выглядеть понятней: res.some_meaningful_name vs res.first/get<0>(res). Тем более при наличии uniform initialization (а в C++98 — aggregate initialization)
Другое дело если результат это действительно набор безликих полей, либо типы полей результат CT-вычислений.
Re[4]: поддержка кортежей на уровне языка
От: jyuyjiyuijyu  
Дата: 17.02.13 04:48
Оценка:
хм ... а зачем вам туплы ? что то они мне никогда не были нужны ...
Re[4]: поддержка кортежей на уровне языка
От: jazzer Россия Skype: enerjazzer
Дата: 17.02.13 07:01
Оценка: +1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>P.S. А вообще меня и обычный синтаксис не напрягает. Тем более tuple не так часто нужны.

EP>Например, если это тип возврата функции (тем более не лямбды) — то тут не трудно и обычную структуру объявить. Названия полей будут служить документацией, да и вызывающий код будет выглядеть понятней: res.some_meaningful_name vs res.first/get<0>(res). Тем более при наличии uniform initialization (а в C++98 — aggregate initialization)
EP>Другое дело если результат это действительно набор безликих полей, либо типы полей результат CT-вычислений.

+1
Туплы длиной больше 3 неюзабельны, если это только не в сгенеренном коде, в который люди не смотрят (или не видят, в случае подкапотной обработки вариадиков и т.п.)
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: поддержка кортежей на уровне языка
От: niXman Ниоткуда https://github.com/niXman
Дата: 17.02.13 07:39
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Не пойму, чем не устраивают обычные туплы, конкретно tie?

ну да, tie() — наименьшая из проблем. довольно лаконично записывается.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[6]: поддержка кортежей на уровне языка
От: Evgeny.Panasyuk Россия  
Дата: 17.02.13 14:15
Оценка: :)
Здравствуйте, Abyx, Вы писали:

A>угу, только с нормальным синтаксисом, слева направо.


Согласен, так привычней. Тогда так:
$$$(a,b,c,result)
cout << a << " " << b << " " << c << endl;

  реализация
#define UNIQ uniq_##__LINE__

#define INIT_PART(r, uniq, i, elem) auto elem( std::get<i>(uniq) );
    
#define AUX(Tuple,Seq) \
    auto &&UNIQ=Tuple; \
    BOOST_PP_SEQ_FOR_EACH_I(INIT_PART, UNIQ, Seq ) \
/**/

#define LAST(...) BOOST_PP_VARIADIC_ELEM( BOOST_PP_SUB(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__),1), __VA_ARGS__ )

#define $$$(...) \
    AUX( LAST(__VA_ARGS__), BOOST_PP_SEQ_POP_BACK(BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) ) \
/**/
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.