Почему я не могу сделать tupleVar.get (3) или .get <3> ()? - PullRequest
3 голосов
/ 30 июля 2010

Я собирался над C ++ 0x. Когда я посмотрел на кортеж , я увидел этот пример. Зачем мне делать get<3>(var)? Почему я не могу сделать var.get(index) или var.get<index>()? Я предпочитаю, чтобы код выглядел и чувствовал себя согласованно.

typedef tuple< int, double, long &, const char * > test_tuple ;
long lengthy = 12 ;
test_tuple proof( 18, 6.5, lengthy, "Ciao!" ) ;
lengthy = get<0>(proof) ;  // Assign to 'lengthy' the value 18.
get<3>(proof) = " Beautiful!" ;  // Modify the tuple’s fourth element.

1 Ответ

6 голосов
/ 30 июля 2010

Вы должны использовать get<0>, потому что кортеж имеет свой тип для каждого из его членов.Поэтому тип результата get<0> равен int, get<1> равен double, get<2> равен long& и т. Д. Этого нельзя достичь при вызове get(0), поскольку он должен иметь фиксированный тип возврата.

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

http://en.wikipedia.org/wiki/Template_metaprogramming
http://www.boost.org/doc/libs/1_43_0/libs/mpl/doc/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...