ich folgendes Problem:Get Ein-/Ausgabetyp aufrufbar
template<typename Func, typename T_in = /*input type of Func */, typename T_out = /*output type of Func */>
std::vector<T_out> foo(Func f, const std::vector<T_in>& input)
{
std::vector<T_out> res(input.size());
for(size_t i = 0 ; i < input.size() ; ++i)
res[ i ] = f(input[ i ]);
return res;
}
int main()
{
// example for f(x) = x*x
std::vector<float> input = { /* ... */ };
auto res = foo([](float in){ return in*in; }, input);
return 0;
}
Wie man oben sehen kann, ich versuche, eine Funktion foo
zu implementieren, die eine Funktion bildet f
jedes Element eines Eingangsvektors input
. Mein Problem ist folgendes: Ich möchte, dass die Elemente des Eingangsvektors input
den Eingangstyp f
(dh T_in
) und die Elemente des Ausgangsvektors den Ausgangstyp f
(dh T_out
) haben, aber ohne den Eingang/Ausgabetyp f
explizit zu foo
(wegen einer besseren Lesbarkeit des Codes). Hat jemand eine Idee wie der Ein-/Ausgangstyp von f
zur Kompilierzeit automatisch abgeleitet werden kann?
Vielen Dank im Voraus.
Vielen Dank. Der Einfachheit halber habe ich in meinem Beitrag oben ein vereinfachtes Beispiel verwendet. Leider kann mein reales Beispiel nicht mit der Standardbibliothek implementiert werden. –