Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何以正确的方式将变量参数传递给变量模板函数C++; 我在C++中找到了一个可变的模板 int sum(int a, int b) { return a + b; } template<typename Func, typename_C++_Templates_C++11 - Fatal编程技术网

如何以正确的方式将变量参数传递给变量模板函数C++; 我在C++中找到了一个可变的模板 int sum(int a, int b) { return a + b; } template<typename Func, typename

如何以正确的方式将变量参数传递给变量模板函数C++; 我在C++中找到了一个可变的模板 int sum(int a, int b) { return a + b; } template<typename Func, typename,c++,templates,c++11,C++,Templates,C++11,如何以正确的方式将变量参数传递给变量模板函数C++; 我在C++中找到了一个可变的模板 int sum(int a, int b) { return a + b; } template<typename Func, typename... Args> auto MainCall(Func func, Args&&... args)-> typename std::result_of<Func(Args...)>::type {

如何以正确的方式将变量参数传递给变量模板函数C++; 我在C++中找到了一个可变的模板
int sum(int a, int b) { return a + b; }

template<typename Func, typename... Args>
auto MainCall(Func func, Args&&... args)-> typename std::result_of<Func(Args...)>::type
{
    return func(std::forward<Args>(args)...);
}

template <typename... Args>
int call2(Args const&... args)
{
    return MainCall(sum, args...); /* calling template function MainCall,  
                                      how to pass the variable arguments to   
                                      Maincall from here?
                                   */
}

int _tmain(int argc, _TCHAR* argv[])
{
  cout << call2(4,5) << endl;
  return 0;
}
intsum(inta,intb){返回a+b;}
样板
自动MainCall(Func Func,Args&…Args)->typename std::result\u of::type
{
返回函数(std::forward(args)…);
}
样板
int call2(Args常量和…Args)
{
返回MainCall(sum,args…)/*调用模板函数MainCall,
如何将变量参数传递给
从这里打电话?
*/
}
int _tmain(int argc,_TCHAR*argv[]
{

您使用的VisualStudio版本是什么?VS2013 Update 4和gcc都是正确的代码。与错误无关,但您不想将参数完美地转发到
call2()吗也有吗?这里有一个方便的省略<代码> >包含Cuang.<代码>列表。它不会编译多于或少于两个参数。你到底想完成什么?@ PraveTrIA:是的,你是对的。我有Visual Studio 2012。我尝试重新安装C++编译器,现在它很奇怪。rks…我正在尝试创建一个模板,该模板将函数名作为字符串,参数作为其类型..我在这里提出了一个问题..我只是在玩模板来实现这一点。而且参数只支持多达5个…传递超过5个参数它会给编译器错误我甚至不知道VS2012支持的variadic模板。我认为它的stdlib通过使用x宏支持一些类似于假的varidiac模板的行为。无论如何,您可以通过将
VARIADIC_MAX
(或类似的东西)定义为更大的数字来增加该限制。`template int CallFunction(const std::string&funcname,Args&…Args){if(!funcname.compare(“sum”){return MainCall(sum,args…)}else if(!funcname.compare(“sum”){return MainCall(size,args…)}else{return 0;}`我收到错误
错误C2197:'int(u cdecl*)(char*):调用的参数太多
请参阅正在编译的类模板实例化“std::_Result\u type”的引用