あなたが達成しようとしていることは明確ではありませんが、あなたのコードが有効な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;
またはGuncFunc
:std::bind
またはラムダの選択
// 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);});
は、あなたの質問の範囲外のようですが、あなたはhere何か役に立つ、thereを見つけたりthis問題であります。
とにかく、あなたはおそらくlambdas,std::function,std::bindまたはvariadic templatesが必要になります。
これは確かにC++で行うことができます。しかし、あなたの質問はいくぶん不明です。 "1行の関数を除いて全く同じことをするいくつかのc関数" - これは完全には解析できません。あなたは外挿して、例を挙げることができますか? –