안녕하세요 Iam은 string을 통해 가변 템플릿을 사용하면서 여기서 무엇을하고 있습니까? 아래 작업을 수행하기 위해 올바르게 사용하는 방법?올바른 방법 Variadic 템플릿 함수 호출을 사용하여 문자열 인수 C++
#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 *) (숯불 *)'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
는
다시 묻는 대신 이전 질문을 개선하십시오. –
나는 C++이 아니기 때문에 아마 예상 했겠지만'MainCall '에 대한 호출이 보이지 않습니다. 또한 아무 것도 제거 할 때까지 아무 것도 제거하지 않으면 버그가 사라집니다. 즉 "sum"에 대한 호출을 제거 할 때 여전히 발생합니까? printf? getchar() ... 등등. 문제를 재현하려면 꼭 필요한 코드 만 있으면됩니다. – franssu
이것은 [this]와 완전히 다른 질문입니다 (http://stackoverflow.com/questions/27701828/how-to-pass-variable-arguments-to-variadic-template-function-in-a-right-way-c) ... 여기에 문자열을 사용하고 함수를 호출하여 variadic 템플릿을 사용하는 방법을 알고 싶습니다. 예 !!! 나는 내가 게시 한 답변을 얻지 못했기 때문에 새로운 질문이 올랐다. – Lo1234