variadic-templates- все статьи тега
Пакет параметров должен быть в конце списка параметров... когда и почему?
Я не понимаю, почему пакет параметров должен быть в конце списка параметров, если последний привязан к классу, в то время как ограничение ослабляется, если список параметров является частью объявления метода-члена. Другими словами, этот компилирует: class C { template<typename T, typename... Args, typename S> void fn() { } }; Следующий не делает: template<typename T, typename... Args, typename S> class C { }; Почему первый случай считается правильным, а второй-нет? Я ...
В C++ функция с переменным числом аргументов шаблоны с переменным числом аргументов макроса
В настоящее время я работаю над проектом, в котором мне нужно упростить существующую систему. Не вдаваясь в детали, проблема заключается в том, что я получаю некоторый указатель функции (от типа: void*), и мне нужно создать функцию из него (= create a function with signature). Так что мой подход заключался в том, чтобы создать следующий шаблон функции с переменным числом аргументов: template <typename ReturnType, typename ... Params> ReturnType(*GetFunction(void* func, Params ...)) (Param ...
лязг не вывести аргумент шаблона в шаблон функции с переменным числом с varargs
Рассмотрим код: #include <tuple> template<class... Args, class T> T method(std::tuple<Args...>, Args..., T, ...) { return T(); } int main() { method(std::make_tuple<int, float, double>(1, 1.0f, 1.0), 1, 1.0f, 1.0, 1); } g++ так как 4.9 не имеет проблем с его компиляцией. clang++ с другой стороны дает ошибку: main.cpp:9:5: error: no matching function for call to 'method' method(std::make_tuple<int, float, double>(1, 1.0f, 1.0), ^~~~~~ m ...
"распаковка" кортежа для вызова соответствующего указателя функции
Я пытаюсь хранить в std::tuple различное число значений, которые позже будут использоваться в качестве аргументов для вызова указателя функции, который соответствует сохраненным типам. Я создал упрощенный пример, показывающий проблему, которую я изо всех сил пытаюсь решить: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":" << b << ":" << c << std::endl; } template <typename ...Args> struct sav ...
Как сохранить шаблон с переменным числом аргументов аргументы?
можно ли как-то сохранить пакет параметров для последующего использования? template <typename... T> class Action { private: std::function<void(T...)> f; T... args; // <--- something like this public: Action(std::function<void(T...)> f, T... args) : f(f), args(args) {} void act(){ f(args); // <--- such that this will be possible } } позже: void main(){ Action<int,int> add([](int x, int y){std::cout << (x+y);}, 3, 4) ...
Расширение пакета вариационных шаблонов
Я пытаюсь изучить вариативные шаблоны и функции. Я не могу понять, почему этот код не компилируется: template<typename T> static void bar(T t) {} template<typename... Args> static void foo2(Args... args) { (bar(args)...); } int main() { foo2(1, 2, 3, "3"); return 0; } когда я компилирую его не удается с ошибкой: ошибка C3520: 'args': пакет параметров должен быть расширен в этом контексте (в функции foo2). ...