-
82 votesanswersviews
如何在可变参数函数中的所有参数上调用std :: forward?
我只是编写一个通用对象工厂并使用boost预处理器元库来创建一个可变参数模板(使用2010并且它不支持它们) . 我的函数使用rval引用和 std::forward 进行完美的转发,它让我思考...当C 0X出来并且我有一个标准的编译器时,我会使用真正的可变参数模板 . 但是,我怎么称呼 std::forward ? template <typename ...Params> voi... -
4 votesanswersviews
调用函数并传递存储在元组中的参数?
我想要一个类Foo来存储一个函数指针,它在构造时得到,并在某个时候调用这个函数 . 我看了这两个问题寻求帮助: Pass tuple's content as variadic function arguments How do I expand a tuple into variadic template function's arguments? 并且,根据答案,提出了这个代码: ... -
30 votesanswersviews
C 11:我可以从多个args转到元组,但是我可以从元组转到多个args吗? [重复]
可能重复:如何将元组扩展为可变参数模板函数的参数? “解包”一个元组来调用匹配的函数指针 在C 11模板中,有没有办法使用元组作为(可能是模板)函数的各个args? 例:假设我有这个功能: void foo(int a, int b) { } 我有元组 auto bar = std::make_tuple(1, 2) . 我可以用它来以一种模板的方式调用 foo(1, 2) 吗? ... -
3 votesanswersviews
c存储指针元组时遇到问题
我有一个对象'S'存储一个简单的指针元组,通过使用可变参数模板使其变得灵活 . 有两种方法,store()和store2() . 第一个(商店)工作正常 . 第二个将无法编译,因为std :: make_tuple失败并显示错误: '调用'make_tuple'没有匹配函数 它进一步补充说,第一个参数没有从'B *'到'B * &&'的已知对话(这个错误在元组库头中很深) . 代码... -
4 votesanswersviews
使用模板化可变参数模板参数作为专用参数
我的头衔可能是错的 - 如果是这样,请纠正我,但在某些时候我很难跟踪我实际上想要实现的东西;) 我有一个类函数模板,如下所示: template<template<typename...> class MapType> Expression Expression::substitute(MapType<std::string, Expression> c... -
27 votesanswersviews
如何在可变参数模板类中获取函数指针的参数类型?
这是对此问题的跟进:Generic functor for functions with any argument list 我有这个仿函数类(完整代码见上面的链接): template<typename... ARGS> class Foo { std::function<void(ARGS...)> m_f; public: Foo( std::fu... -
3 votesanswersviews
使用可变参数模板参数丢失rvalue限定符
我正在尝试编写一个通用工厂类,为我的应用程序自动注册类型 . 为了保证灵活性,这个工厂有一个构造函数参数的可变参数模板参数;即它允许默认构造函数或构造函数需要任意数量的参数 . 参数名称相当不言自明; AbstractType是工厂的抽象基类;返回的对象将是此类型的 std::shared_ptr . 这个通用工厂工作正常,我为它编写的所有测试工作都非常好,直到我试图为包含不允许复制构造或赋值的... -
5 votesanswersviews
Variadic模板函数,其中返回类型取决于模板参数列表
我得到一个“错误的模板参数数量(2,应该是1)”错误,我无法理解 . 我有一个类为其他想要与之交互的类型提供一些辅助函数,设置第一个模板参数,在创建时它们必须自动相互兼容 . 为了以方便,通用的方式执行此操作,我决定使用可变参数模板,该模板旨在传递构造函数参数和要创建的对象类型的其他模板参数: template<typename INTERNAL_TYPE> class Linker ... -
7 votesanswersviews
对于每个模板类型,设置类型的参数
假设我有一个可变参数模板类 . 如何创建一个函数,使其参数属于集合类型,例如 int ,参数个数等于模板类型的数量? template <typename... Types> class Test { public: void Func(???); // I don't know how to declare such a function } Test<string,... -
12 votesanswersviews
传递大括号列表参数时调用可变参数函数模板的问题
考虑这个功能模板: template <class... T> void foo (std::tuple<T, char, double> ... x); 此调用有效: using K = std::tuple<int, char, double>; foo ( K{1,'2',3.0}, K{4,'5',6.0}, K{7,'8',9.0} ); 这个没有... -
236 votesanswersviews
“解包”一个元组来调用匹配的函数指针
我试图在_363229中存储不同数量的值,这些值稍后将用作调用与存储类型匹配的函数指针的参数 . 我创建了一个简化的示例,显示了我正在努力解决的问题: #include <iostream> #include <tuple> void f(int a, double b, void* c) { std::cout << a << ":... -
5 votesanswersviews
Clang在fold表达式中找不到模板二元运算符
这是我连接元组的二元运算符: template <class... Args1, class... Args2> constexpr decltype(auto) operator+(const std::tuple<Args1...> &tup1, const std::tuple<Arg... -
2 votesanswersviews
具有可变函数参数的C多态性
我正在与您分享我使用可变参数函数参数的类所遇到的问题 . 它是以下代码中显示的类Thread . 它是std :: thread的包装器,以便使用函数模式 . 我想在这个函数中使用多态来将类Thread继承到一个新类Functor中,但是gcc会返回以下错误: #include <thread> #include <iostream> using namespace st... -
7 votesanswersviews
将包含initializer_list的参数包扩展为构造函数
我打算在即将到来的项目中使用 shared_ptr ,所以(不知道 std::make_shared )我想写一个可变参数模板函数 spnew<T>(...) 作为 shared_ptr 的 shared_ptr -returning替身 . 一切顺利,直到我试图使用其构造函数包含 initializer_list 的类型 . 当我尝试编译下面的最小示例时,我从GCC 4.5.2得到... -
2 votesanswersviews
c 11 - 将result_of,decltype,std :: function和variadic模板一起工作
我在使用std :: result_of,decltype和std :: function方面遇到了麻烦 使用可变参数模板 . 我有以下功能 - int foo(int a, int b, int c) { std::cout << a << b << c << std::endl; return 0; } 以下课程 templat... -
0 votesanswersviews
c variadic模板:无法匹配功能
这是我的代码: #include <iostream> #include "Generator.h" // user-defined class char getChar(Generator & generator) { return generator.generateChar(); } char getChar(int pos, const ... -
1 votesanswersviews
std :: result_of无法返回void返回类型
我正在尝试使用SFINAE来创建函数调用包装器,使用std :: result_of来获取函数的返回类型 . 小样本重现问题: void test(int) {} template<typename T, typename... Args, typename R = typename std::result_of<T(Args...)>::type, typename std:... -
22 votesanswersviews
为什么这会超过最大递归模板深度?
我一直在使用可变参数模板并注意到以下内容 . 这很好用: auto t = std::make_tuple(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); 这将给出错误(gcc 4.8.2(编辑:Clang 3.4)默认最大深度为256): auto t2 = std::make_tuple(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15... -
12 votesanswersviews
为什么clang拒绝variadic模板的朋友功能
我有以下示例代码,简化为必需的,编译与gcc 6.1,gcc 7.0 head和Visual Studio 2015 / 2017RC,但没有任何clang版本 . #include <iostream> #include <tuple> using namespace std; namespace outer { namespace test { tem... -
1 votesanswersviews
使用decltype(lambda)的C / variadic模板和参数包
我很遗憾地问一个之前可能会被问到的问题,但是我搜索了很长时间并没有找到答案 . 我的问题是我想调用 template <typename GenericLambda, typename... LambdaArgs> 类型的模板函数,而不需要总是先在模板参数中写 decltype(my_lambda) . #include <functional> #include... -
4 votesanswersviews
如何正确实现具有可变数量的std :: string_view参数的函数?
所需行为 我基本上想要的是创建一个这样的函数: void func(std::string_view... args) { (std::cout << ... << args); } 它应该能够与可转换为 std::string_view 的类一起工作 only . 例: int main() { const char* tmp1 = "Hel... -
0 votesanswersviews
使用模板特化分割可变参数包
我正在尝试定义一种模板'map'原语(如map-reduce) . 我的想法是我想将一个函数应用于模板参数包的每个项目 . 该函数可以是任何可调用对象 . 它可以返回任何类型(虽然返回类型将被忽略),并且它可以在有问题的项目之上采取其他参数 . 棘手的部分是我有效地拥有两个需要处理的参数包 . 它们最初会被打包在一起,但我想使用模板特化来拆分它们 . 以下是我尝试这样做的尝试 . 如果不明显(由于... -
39 votesanswersviews
如何迭代打包的可变参数模板参数列表?
我正在尝试找到一个迭代包变量模板参数列表的方法 . 现在和所有迭代一样,您需要某种方法来了解打包列表中有多少参数,更重要的是如何从打包参数列表中单独获取数据 . 一般的想法是迭代列表,将int类型的所有数据存储到向量中,将char *类型的所有数据存储到向量中,并将float类型的所有数据存储到向量中 . 在这个过程中,还需要一个单独的向量来存储参数进入顺序的各个字符 . 例如,当你使用push_... -
5 votesanswersviews
从模板类调用variadic参数函数
我有一个带有可变参数模板成员函数的模板类,我无法从类外部调用 . 这是我想要做的简化示例: template<typename T> struct foo{ foo(){} template<int... I> int run(){ return sizeof...(I); // or whatever } }; temp... -
13 votesanswersviews
变量模板别名作为模板参数(第2部分)
这是another question的后续行动 . 它指的是同样的问题(我希望),但使用一个完全不同的例子来说明它 . 原因是在前面的示例中,只有实验性GCC 4.9因编译器错误而失败 . 在此示例中,Clang和GCC 4.8.1也以不同方式失败:Clang产生意外结果,GCC 4.8.1报告不同的错误消息 . 上一个问题的答案或多或少地说代码是有效的,问题在于GCC的实验版本 . 但这个结果让... -
9 votesanswersviews
当variadic模板不是最后一个参数时,如何重载它们
基本上这个问题可以用这个例子来概括: template <typename ...Us> void foo(Us...) { std::cout << "A\n"; } template <typename ...Us> void foo(Us..., int) { std::cout << "B\n"; }... -
3 votesanswersviews
使用成员字段调用可变参数类模板的成员方法
我学习了一些关于可变参数模板的知识,并在互联网上搜索了一些示例,现在尝试编写一些棘手的代码,用一个字段调用成员变量类模板的方法 . 我无法理解为什么它不起作用 . 请帮忙 . 以下是示例类: class BarBase { public: BarBase() = default; virtual void call() = 0; }; template<typename ... -
3 votesanswersviews
将可变参数args传递给模板函数时的编译错误
我有以下模板方法: template<typename T, typename... Args> void register_scene(const std::string& name, Args&&... args) { auto func = std::bind(&T::template create<Window*, Args&... -
0 votesanswersviews
可变参数模板函数的包装模板
我正在为包装器实现一个模板,如: C++ function call wrapper with function as template argument Wrap a function pointer in C++ with variadic template 从上面的链接中获取的包装是: template<typename Fn, Fn fn, typename... Arg... -
0 votesanswersviews
C -17可变参数模板:捕获回调参数的返回类型和参数类型
我花了好几个星期来解决这个难题,并认为我可能会把它作为对C变量模板人群的挑战 . 如果可以,我打赌你会告诉我如何在大约10秒内完成 . 假设我在C 17中有一个函数集合,每个函数都有自己的返回类型(或void),每个函数都有自己的参数类型 . 为简单起见,混合了POD参数和指向类的指针,可变数量的args等 . 所以有两个例子: int somefunc(int x, double d) { re...