C ++ 0x передача аргументов в функции шаблонных переменных - PullRequest
3 голосов
/ 16 июля 2010

Что значит принимать переменное число аргументов по ссылке?Означает ли это, что каждый из аргументов передается по ссылке?

Рассмотрим, например, следующие функции, которые выполняют некоторую обработку каждого из своих аргументов:

void f()  // base case for recursion
{
}


template <typename Head, typename ... Tail>
void f(Head& head, Tail&... tail)
{
    // Do processing on head
    process(head);

    // Now recurse on rest of arguments
    f(tail...);
}

Теперь, если у меня есть:

int a, b, c;
...
f(a, b, c);

Приведет ли это к созданию экземпляров f (int &, int &, int &), f (int &, int &) и, наконец, f (int &)?

Как насчет того, чтобы изменить второй параметрдля f () быть "Хвост ..." вместо "Хвост & ...".Будут ли экземпляры теперь f (int &, int, int), f (int &, int) и, наконец, f (int &), означая, что, например, 'c' будет скопировано через первые два вызова, а последний вызов будет модифицироватьскопировать вместо оригинала?

Может ли кто-нибудь указать на хороший справочник, который объясняет, как именно работают шаблоны с переменными числами?

1 Ответ

2 голосов
/ 16 июля 2010

Я думаю, что ваша интуиция верна, вы можете прочитать все детали из текущей черновой спецификации ISO (она еще не завершена), и вы можете проверить их с GCC> 4.3

...