C++ 使用带字符串参数c+的可变模板函数调用的正确方法+;

C++ 使用带字符串参数c+的可变模板函数调用的正确方法+;,c++,c++11,C++,C++11,您好,我在这里通过字符串使用可变模板有什么错误? 如何正确使用它来完成以下任务 #include <iostream> #include<string> int sum(int a, int b, int c, int d) { return a+b+c+d; } int strcopy(char* str) { strcpy(str,"Hello World!!!"); return 1; } template<typename Func, typenam

您好,我在这里通过字符串使用可变模板有什么错误? 如何正确使用它来完成以下任务

#include <iostream>
#include<string>

int sum(int a, int b, int c, int d) { return a+b+c+d; }
int strcopy(char* str)   { strcpy(str,"Hello World!!!"); return 1; }

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... funcname, typename... Args>
int CallFunction(std::string const& Func , Args&&... args)
{

    if(!Func.compare("sum"))
    {
        return MainCall(sum, args...);
    }
    else if(!Func.compare("strcopy"))
    {
        return MainCall(strcopy, args...);
    }
    else
    {
        return 0;
    }

}


int _tmain(int argc, _TCHAR* argv[])
{
    char buffer[512];
    cout <<  CallFunction("sum",1,2,3,4) << end1; /* How to properly execute "sum" function by sending string name to variadic function template function??? */
    CallFunction("strcopy",buffer); /* How to properly execute "strcopy" function by sending string name to variadic function template function??? */
    printf("Buffer says = %s" , buffer); /* Should print "Hello World!!!" */
    getchar();
    return 0;
}
#包括
#包括
整数和(整数a,整数b,整数c,整数d){返回a+b+c+d;}
int strcopy(char*str){strcpy(str,“helloworld!!!”);返回1;}
模板
自动MainCall(Func Func,Args&…Args)->typename std::result\u of::type
{
返回函数(std::forward(args)…);
}
模板
int CallFunction(std::string const&Func,Args&&…Args)
{
如果(!函数比较(“总和”))
{
返回MainCall(总和、参数…);
}
如果(!函数比较(“strcopy”))
{
返回main调用(strcopy,args…);
}
其他的
{
返回0;
}
}
int _tmain(int argc,_TCHAR*argv[]
{
字符缓冲区[512];
问题是:

当你打电话时:

CallFunction("sum", 1, 2, 3, 4)
模板函数
CallFunction
funcanme={}
Args={int,int,int,int}
实例化。在这个函数中有一行:
MainCall(strcopy,Args…;
在本例中变成:
MainCall(strcopy,1,2,3,4)
依次调用strcopy(1,2,3,4)
这是无效的调用

< C++ >调用不同类型的函数时,没有一个(非卷积的)基于运行时已知的名称,并采用一个变量的参数包。

< P>问题是:

当你打电话时:

CallFunction("sum", 1, 2, 3, 4)
模板函数
CallFunction
funcanme={}
Args={int,int,int,int}
实例化。在这个函数中有一行:
MainCall(strcopy,Args…;
在本例中变成:
MainCall(strcopy,1,2,3,4)
依次调用strcopy(1,2,3,4)这是无效的调用

< C++ >调用不同类型的函数时,没有一个(非卷积的)基于运行时已知的名称,并采用一个变量的参数包。

< P>问题是:

当你打电话时:

CallFunction("sum", 1, 2, 3, 4)
模板函数
CallFunction
funcanme={}
Args={int,int,int,int}
实例化。在这个函数中有一行:
MainCall(strcopy,Args…;
在本例中变成:
MainCall(strcopy,1,2,3,4)
依次调用strcopy(1,2,3,4)这是无效的调用

< C++ >调用不同类型的函数时,没有一个(非卷积的)基于运行时已知的名称,并采用一个变量的参数包。

< P>问题是:

当你打电话时:

CallFunction("sum", 1, 2, 3, 4)
模板函数
CallFunction
funcanme={}
Args={int,int,int,int}
实例化。在这个函数中有一行:
MainCall(strcopy,Args…;
在本例中变成:
MainCall(strcopy,1,2,3,4)
依次调用strcopy(1,2,3,4)这是无效的调用



没有(非卷积)C++中用一个名为运行时的名称调用不同原型的函数,并使用一个变量的参数包。

请改进你的旧问题,而不是再次问相同的问题。我不喜欢C++,也许它是意料之中的,但是我看不到你对“代码>主调用< /COD>”的调用。错误消失了。也就是说,当您删除对“sum”的调用时,它还会发生吗?printf?getchar()…等等。我们只需要严格必要的代码来重现您的问题。这是一个与…完全不同的问题。在这里,我想知道如何使用变量模板,使用字符串并调用函数。是的!!!我在评论栏的帖子中问过这个问题,因为我没有得到任何答案,我发布了它有一个新问题。@Lo1234嗯,patience是一份礼物。@Lo1234由于您的代码运行良好,您没有得到关于上一个问题的任何答案。您承认使用了一个不支持变量模板的旧编译器,升级后您能够成功运行您的代码。您现在对该问题的答案是什么?请改进您的旧问题,而不是询问同样的,我不喜欢C++,也许它是意料之中的,但我看不到你对Cux:MnCube 的调用。此外,尝试删除任何东西,直到移除更多的东西使bug消失。…等等。我们只需要严格必要的代码来重现您的问题。这是一个与…完全不同的问题。在这里,我想知道如何使用变量模板,使用字符串并调用函数。是的!!!我在评论栏的帖子中问过这个问题,因为我没有得到任何答案,我发布了它有一个新问题。@Lo1234嗯,patience是一份礼物。@Lo1234由于您的代码运行良好,您没有得到关于上一个问题的任何答案。您承认使用了一个不支持变量模板的旧编译器,升级后您能够成功运行您的代码。您现在对该问题的答案是什么?请改进您的旧问题,而不是询问同样的,我不喜欢C++,也许它是意料之中的,但我看不到你对Cux:MnCube 的调用。此外,尝试删除任何东西,直到移除更多的东西使bug消失。…等等。我们只需要严格必要的代码来重现您的问题。这是一个与…完全不同的问题。在这里,我想知道如何使用变量模板,使用字符串并调用函数。是的!!!我在评论栏的帖子中问过这个问题,因为我没有得到任何答案,我发布了它有一个新问题。@Lo1234嗯,pati恩斯是一份礼物。@Lo1234因为你的同事,你上一个问题没有得到任何答案