У меня с трудом понимается расширение пакета параметров. То, что меня смущает, - это то, что на правой стороне появляются точки, а с левой стороны - точки. Я наткнулся на сообщение this, которое немного помогло. Предположу, у меня есть следующие два примераШаблоны Variadic - понимание расширения пакета параметров
Example 1:
template <class ...A> --> line 1
int func(A... arg) --> line 2
{
return sizeof...(arg);
}
int main(void)
{
return func(1,2,3,4,5,6);
}
Сообщение я уже упоминался выше, я считаю, упоминает, что разница ч/б ...A
и A...
является то, что первый делает левую сторону расширение, а второй делает правое боковое расширение. Я не уверен, что это значит. Может ли кто-нибудь прояснить это с помощью того, как что-то будет выглядеть при расширении. Единственное, что я понимаю, до сих пор относительно точек на правой стороне являются такие примеры, как это
//Foo and bar are variadic parameter packs
Foo... => Foo1, Foo2, Foo3, etc
std::vector<Foo>... => std::vector<Foo1>, std::vector<Foo2>, std::vector<Foo3>, etc.
std::tuple<Foo...>(bar...) => std::tuple<Foo1, Foo2, Foo3, etc>(bar1, bar2, bar3, etc)
&bar... => &bar1, &bar2, &bar3, etc
может любой, пожалуйста, уточнить, какие точки расширения в линии 1 и линии 2 и в чем разница между левой боковое расширение и расширение правой стороны?
Пространства вокруг точек не имеют значения. Поэтому 'class ... A' эквивалентен' class ... A', а 'A ... arg' эквивалентен' A ... arg'. Только 'sizeof ...' не может иметь пробелов. – dyp
@dyp Вы уверены в 'sizeof ...'? –
@ T.C. Не совсем. В стандарте есть несколько советов, например: «Оператор' sizeof ... '* .. – dyp