달성하려는 목표는 명확하지 않지만 코드가 올바른 C++로 어떻게 변환 될 수 있는지 예제가 나와 있습니다.
template<typename F>
void GuncFunc(const F& fPtr) {
std::string funcVar = "Foo!";
fPtr(funcVar);
}
:
template<typename ...T>
void FuncFunc(const std::function<void(T...)>& fPtr) {
std::string funcVar = "Foo!";
fPtr(funcVar);
}
또는 쉽게는 변형을 사용 :
template<typename T1, typename T2>
void Func(T1 par1, T2 par2) {
std::cout << par1 << " " << par2 << std::endl;
}
그런 다음 우리는 당신이 원하는 모든 기능을 수용 FuncFunc
을해야한다 : 첫째, 인수의 최대 수와 Func
를 정의 할 수 마지막으로 FuncFunc
:
auto Func1 = std::bind(Func<float, std::string>, 3.14f, std::placeholders::_1);
auto Func2 = std::bind(Func<std::string, int>, std::placeholders::_1, 42);
FuncFunc(std::function<void(std::string)>(Func1));
FuncFunc(std::function<void(std::string)>(Func2));
return 0;
01 23,516,
또는 GuncFunc
:
// Using std::bind
GuncFunc(std::bind(Func<float, std::string>, 3.14f, std::placeholders::_1));
GuncFunc(std::bind(Func<std::string, int>, std::placeholders::_1, 42));
// Or using lambdas:
GuncFunc([](std::string s){Func<float, std::string>(3.14f, s);});
GuncFunc([](std::string s){Func<std::string, int>(s, 42);});
는 std::bind
또는 람다이 질문의 범위를 벗어난 것 같다 선택,하지만 당신은 here, there 또는 this 문제의 유용한 무언가를 발견 할 수있다.
어쨌든, lambdas, std::function, std::bind 또는 variadic templates가 필요합니다 가능성이 높다.
이것은 확실히 C++에서 할 수 있습니다. 그러나 귀하의 질문은 다소 불분명합니다. "한 줄에있는 함수를 제외하고는 똑같은 일을하는 몇 가지 c 함수"- 이것은 완전히 분석 할 수 없습니다. 당신이 추정하고 예를들 수 있습니다. –