А подскажите пожалуйста как происходит матчинг variadic аргументов, если у меня, к примеру template<typename... Args> void foo(S& s, Args... args); и я вызываю foo(s, a0, a1, a2) то понятно, а если у меня template<typename... Args0, typename... Args1> void bar(S& s0, Args0...args0, S& s1, Args1...args1); то при попытке bar(s0, a0, a1, s1, a1, a2) не находит соответствия. Почему-то в таком случае, Args0... по мнению clang это пустой список. И как такое победить?
на моей памяти более одного пака в аргументах функции невозможно сделать нормально
Всем привет. Есть у меня проблема producer-consumer. Есть 2 потока: main, который producer и consumer одновременно и второй, который только producer. Можно ли это как-то синхронизировать через очередь? Или самым простым и нормальным вариантом будет вынести producer из main потока в отдельный поток, а main оставить только consumer'ом?
А подскажите пожалуйста как происходит матчинг variadic аргументов, если у меня, к примеру template<typename... Args> void foo(S& s, Args... args); и я вызываю foo(s, a0, a1, a2) то понятно, а если у меня template<typename... Args0, typename... Args1> void bar(S& s0, Args0...args0, S& s1, Args1...args1); то при попытке bar(s0, a0, a1, s1, a1, a2) не находит соответствия. Почему-то в таком случае, Args0... по мнению clang это пустой список. И как такое победить?
Так. Давайте сначала. Кажется я чего-то упустил. У меня есть foo(S, Args...); Я хочу написать такой bar, что bar(s0, a0, a1, s1, a2, ..., sN, argsN...) будет разворачиваться в foo(s0, a0, a1); foo(s1, a2, a3); ...; foo(sN, argsN...);
Так. Давайте сначала. Кажется я чего-то упустил. У меня есть foo(S, Args...); Я хочу написать такой bar, что bar(s0, a0, a1, s1, a2, ..., sN, argsN...) будет разворачиваться в foo(s0, a0, a1); foo(s1, a2, a3); ...; foo(sN, argsN...);
Тебе нужно перебрать вариадические параметры одной функции и инвокать вторую функцию n-1 раз с меньшим числом параметров?