Miért nem működik a C++ kódom és hogyan kellene ezt helyesen megcsinálni?
template<typename FUNCTION1, typename FUNCTION2>
auto Combine(FUNCTION1 function1, FUNCTION2 function2)
{
return [&](auto const& p)
{
auto result1 = function1(p);
auto result2 = function2(result1);
return result2;
};
};
double X2(double d)
{
return d * 2;
}
int main()
{
auto c = Combine(X2, X2);
auto d = c(1.0);
return 0;
}
"Ha esetleg kettőnél több függvényt szeretnél:"
Csináltam korábban hasonlót, de a te megoldásod szebb. Köszi, ebből lehet tanulni.
Amúgy miért ez a sorrend a kompozíciónál, amit írtál? Több helyen is láttam hogy ez a szokás ahogy te csináltad.
Mármint a kompozíció ezt szokta megvalósítani:
fn1(fn2(fn3(arg)))
és nem pedig ezt:
fn3(fn2(fn1(arg)))
... nekem az tűnt kézenfekvőnek, hogy az első függvény kapja a paramétert és a visszatérő értékével hívódik meg a második függvény, mert úgy lenne ha hagyományos módon és nem kompozícióval valósítanám meg. Szóval honnan ered ez a szokás?
"Amúgy miért ez a sorrend a kompozíciónál, amit írtál?"
Matematikában is úgy szokás: [link]
Valamint az f(g(x)) nem minden esetben azonos g(f(x))-el. Pl f(x) = x*x, g(x) = 2*x
f(g(x)) = (2x)*(2x) = 4*x*x
g(f(x)) = 2*(x*x) = 2*x*x
"Másrészt nemtudom, hogy ez a variadikus megoldás nem e jelentene problémát debuggolásnál. Nem lehet bele breakelni úgy hogy lássam a helyi változókat, meg hogy mi mivel tért vissza."
Próbáld úgy, hogy a breaket az összetett függvény hívásához rakod és utasításonként lépkedsz. De tekintve, hogy rekurzív is meg fogja nehezíteni a debugolást, de rövid egyszerű függvényeknél könnyen észrevehetőek még a hibák.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!