gpt4 book ai didi

c++ - 使用带有字符串参数的 Variadic 模板函数调用的正确方法 c++

转载 作者:行者123 更新时间:2023-11-28 00:20:27 25 4
gpt4 key购买 nike

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

#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;
}

我得到编译器错误
错误 C2197:“int (__cdecl *)(char *)”:Maincall 的参数太多
<强> see reference to class template instantiation 'std::_Result_type<false,_Fty,_V0_t,_V0_t,_V2_t,_V2_t,_V4_t,_V4_t,_V6_t,_V6_t,std::_Nil,std::_Nil,std::_Nil,std::_Nil,std::_Nil>' being compiled

最佳答案

问题是:

当你打电话时:

CallFunction("sum", 1, 2, 3, 4)

模板化函数 CallFunction 是用 funcanme={} 实例化的(完全没用,你可以去掉它)和 Args={int, int, int,诠释。在此函数中,您有一行:MainCall(strcopy, args...); 在本例中变为:MainCall(strcopy, 1, 2, 3, 4)依次调用 strcopy(1, 2, 3, 4),这是无效调用。

在 C++ 中没有(非复杂的)方法可以基于运行时已知的名称并采用可变参数包来调用具有不同原型(prototype)的函数。

关于c++ - 使用带有字符串参数的 Variadic 模板函数调用的正确方法 c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27719004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com