Описание тега pack-expansion

1 ответ

Как создать шаблон с переменным количеством параметров типа?

В нашей кодовой базе мы используем std::variant<std::shared_ptr<SomeClass>, ...> много. Это, очевидно, требует много написания. Как сделать шаблон? template <class... T> using VarSP = std::variant<std::shared_ptr<???>>;…
02 сен '19 в 12:38
1 ответ

Как обобщить вариативную функцию fn <S, ...Args> на fn <S0, ...Args0, S1, ...Args1, ..., SN, ...ArgsN>

Предположим, что существует вариативная функция template<typename... Args> foo(const S& s, Args... args). struct S {}; template<typename... Args> void foo(const S& s, Args... args); void check_foo() { S s0{}; S s1{}; char a0 = 0;…
11 май '20 в 17:22
1 ответ

Передайте аргументы, упакованные с параметрами, в std::queue, чтобы позже вызвать другую функцию

Я задал аналогичный вопрос ранее, не осознавая, что он недостаточно конкретен. Итак, у меня есть эта функция, которая должна принимать все аргументы функции печати с... и всем остальным, а затем помещать ее в очередь, которая позже вызовет фактическ…
3 ответа

Попытка потребовать, чтобы несколько вариативных типов были конкретными типами

В настоящее время это псевдокод, так как я работаю над этой идеей, прежде чем начну писать ее как полный код. Я знаю, что могу создать обычную вариативную функцию, которая использует va_arg а также va_list такие как printf() тем не менее, я хочу пол…
0 ответов

Передать в очередь список аргументов, упакованных с параметрами.

Что мне нужно сделать, так это иметь функцию, которая принимает список произвольных аргументов, используя оператор пакета параметров, и помещает весь этот список в очередь, из которой я могу позже передать эти аргументы в другую функцию. Такие вещи:…
03 фев '20 в 00:14
1 ответ

Как у вас может быть несколько строк или операторов внутри расширения пакета C++?

Предположим, у меня есть простой код, подобный приведенному ниже, который просто печатает все значения в кортеже и отслеживает текущую итерацию. #include <iostream> #include <tuple> #include <utility> using std::cout; int main() { …
02 окт '20 в 00:44
1 ответ

Проблема с порядком оценки в расширении пакета параметров

Я написал шаблон, который требует istream& и функцию, и предполагается, что все параметры этой функции извлекаются из istream, вызовите функцию с этими параметрами и верните результат. Все работает нормально, кроме порядка вычисления параметров …
21 сен '20 в 11:16
1 ответ

Черная магия с использованием Initializer_list и расширения пакета

Для расширения параметров гибкой функции существует метод, использующий std::initializer_list. Однако я не мог этого понять. Может ли кто-нибудь объяснить это понятным образом? template<typename T, typename... Args> auto print(T value, Args...…
14 сен '20 в 16:34
2 ответа

Расширение переменных для доступа к многомерному std::array

Предположим следующую структуру multi_array: template <typename type, std::size_t... sizes> struct multi_array { using storage_type = typename storage_type<type, sizes...>::type; using value_type = type; using size_type = std::array<s…
0 ответов

Как работает шаблон в пакете аргументов шаблона функции?

Здравствуйте, у меня есть этот пример о шаблонах и шаблонах функций с переменным числом аргументов: int& neg(int& x){ x = -x; return x;} void f(int& x){ std::cout << x << ", "; } template <typename T, typename...Args> v…
1 ответ

Множественное наследование от расширения пакета

Недавно я видел это в производственном коде и не мог понять, что он делает: template <class... Ts> struct pool : pool_type<Ts>... { //... }; Я никогда не видел, чтобы расширение пакета происходило для родительских классов. Он просто насл…
26 мар '22 в 11:09
1 ответ

GCC & Clang vs MSVC Ошибка при расширении пакета параметров шаблона в том же предложении параметров для шаблонов функций

Я наткнулся на следующее утверждение в : Если параметр-шаблона является параметром -типом с многоточием перед его необязательным идентификатором или является объявлением параметра , объявляющим пакет ([dcl.fct]), то параметр-шаблона является пакетом…
1 ответ

Ошибка MSVC vs Clang/GCC при разрешении перегрузки шаблонов функций, один из которых содержит пакет параметров

Я использовал пакет параметров, когда заметил, что один из таких случаев (показан ниже) отлично компилируется в gcc и clang, но не в msvc: template<class T> void func(T a, T b= T{}) { } template<class T, class... S> void func(T a, S... b…
1 ответ

Функция вариативного шаблона C++ ОШИБКА C2672 «не найдена соответствующая перегруженная функция»

В настоящее время я пытаюсь ознакомиться с вариативными шаблонами в C++, но наткнулся на какую-то стену, где каждая рекурсивная реализация выдает мне ошибку C2672. Даже примеры, которые я смотрел в видеороликах в Интернете и которые видел в работе, …
04 сен '23 в 16:59
0 ответов

Как перебрать список переменных аргументов

Когда я попытался перебрать переменные аргументы с помощью следующей функции Я не понимаю '{(Print(Param),0)... } 'где используется 0 #include<iostream> using namespace std; template<typename T> void Print(T& arg) { cout << arg…