It's not clear what you are trying to achieve, but here is an example how your code may me translated into valid C++. First, let's define your Func
with maximum number of arguments:
template<typename T1, typename T2>
void Func(T1 par1, T2 par2) {
std::cout << par1 << " " << par2 << std::endl;
}
Then we should make FuncFunc
accept any function you want:
template<typename ...T>
void FuncFunc(const std::function<void(T...)>& fPtr) {
std::string funcVar = "Foo!";
fPtr(funcVar);
}
or easier to use variant:
template<typename F>
void GuncFunc(const F& fPtr) {
std::string funcVar = "Foo!";
fPtr(funcVar);
}
and finally use 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;
or 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);});
Choosing std::bind
or lambdas seems to be out of scope of your question, but you may found something useful here, there or in this question.
Anyway, very likely you will need lambdas, std::function, std::bind or variadic templates.