I am writing the program in C ++ that I have different values for the same Example: And I can call the function like this: But soon I came to know that too many repetitive monorector definitions So I changed to a solution using lambda: But this time it is difficult to call these tasks: And this is not as clear as the previous solution. Is this a more elegant way to implement it in C ++? Am I forgetting something? Any suggestions would be appreciated! Try it out: function / method, you will be able to do it properly too: Edit : In response to comments: The last solution was not inline. However, it was: Disassembly: Actually, the solution with Factor in the case of Run 2 Was also applied for a little while: in loop Function should be embedded
For
(i = 0; i & lt; N_ITER; i ++) {/ * ... * / function_A ( ); For / * ... * /} (i = 0; i
function_A and
function_B my first solution in this function uses Functors and Function templates as follows:
class function_A {public: void operator () () {/ * ... *}}; Square function_B {public: zero operator () ()) {/ * ... *}}; Template & lt; Class T & gt; Class run {public: zero operator () () (/) ... * / t funk; For (i = 0; i
run
& lt; Function_A & gt; () () (); To run & lt; Function_B & gt; () () ();
class xxx {public: zero operator () () {...}}; In code and it looks strange.
automatic function_A = [] () {/ * ... *}; Auto function_b = [] () {/ * ... * /}; Template & lt; Class T & gt; Class run {public: T-Funk; Run (T Funk): Funk (throw) {} Zero operator () () {/ * ... * for (i = 0; i
run
& lt; Decltype (function_A) & gt; FuncA (function_A); FuncA (); To run & lt; Decltype (function_A) & gt; FuncB (function_A); FuncB ();
Zero run (std :: function & Lt; void (zeros)> fn) {for (int i = 0; i & lt; N_ITER; i ++) fn (); } (...) Auto lambda 1 = [] () {std :: cout & lt; & Lt; "Hello, world! \ N"; }; Run (lambda1); After formatting
class C {Public: Zero Operator () () () {printf ("Hello World for Factor! \ N"); }}; (...) cc; Run (c);
template & lt; Typename T & gt; Zero run 2 (tfn) {for (int i = 0; i
auto lambda 1 = [] () {std :: cout & lt; & Lt; "Hello, world! \ N"; }; Run2 (lambda1); 002 E 1280 mov ecx, dword ptr ds: [2E3044h] 002 E 1286 call std :: operator
cc; Run2 (c); 01031293 MOV SEI, 0 EH 01031298 JMP Main + 30H (010312AH) 0103129A Li Abex, [EBKS] 010312A MOG EquAx, Dvord PTR DS: [1033044 H] \ 010312A 6 mov ADX, 10331AC | 010312 AB Call Study :: Operator <; & Lt; & Lt; Std :: char_traits & lt; Four & gt; & Gt; (01031750 h) & gt; Loop 010312 Bd Dec Sc. 010312 B1 JNE Main + 30 H (010312AH) /
No comments:
Post a Comment