Вложенное расширение пакетовC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вложенное расширение пакетов

Сообщение Anonymous »

Я разъяснял некоторые из моих пониманий мета-программирования C ++. Поэтому, глядя на такую ​​функцию, как (мой код) < /p>

Код: Выделить всё

using namespace std;

template
constexpr auto
for_each(tuple as, F f) {
return apply(
[](auto... xs){
(f(xs), ... );
},
as
);
}
< /code>
Я могу его гнездиться < /p>
template 
void g(A a, B b);

template
constexpr auto
run_all(
tuple as,
tuple bs)
{
return for_each(
as,
[bs](auto x){
for_each(
bs,
[x](auto y) {
g(x, y);
}
);
}
);
}
< /code>
Но если я вставлю его в его вложенной версии, я получаю что-то вроде < /p>
template 
void g(A a, B b);

template
constexpr auto
run_all(
tuple as,
tuple bs)
{
return apply(
[bs](auto... xs){
(
apply(
[xs](auto... ys){
(g(xs, ys), ...);
},
bs
)
, ...);
},
as
);
}
И мне не хватает, как знает внутренний эллипсис », чтобы расширить только ys , а не xs . Защищен ли XS от расширения запечатленным или что -то в этом роде? Или, может быть, мне нужно признать, что вы не всегда можете встроить в присутствии пакетов? Где -то я смущен.>

Подробнее здесь: https://stackoverflow.com/questions/794 ... n-of-packs
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»