Is storing any type of function in one variable possible?What are the differences between a pointer variable and a reference variable in C++?What's the difference between a method and a function?What is the naming convention in Python for variable and function names?var functionName = function() vs function functionName() What is the scope of variables in JavaScript?How do you check if a variable is an array in JavaScript?Set a default parameter value for a JavaScript functionHow to determine if variable is 'undefined' or 'null'?How to check if a variable is set in Bash?JavaScript check if variable exists (is defined/initialized)

Does an advisor owe his/her student anything? Will an advisor keep a PhD student only out of pity?

250 Floor Tower

The screen of my macbook suddenly broken down how can I do to recover

Where does the bonus feat in the cleric starting package come from?

The IT department bottlenecks progress. How should I handle this?

How do you respond to a colleague from another team when they're wrongly expecting that you'll help them?

Melting point of aspirin, contradicting sources

When were female captains banned from Starfleet?

Lowest total scrabble score

How should I respond when I lied about my education and the company finds out through background check?

The Staircase of Paint

Where did Heinlein say "Once you get to Earth orbit, you're halfway to anywhere in the Solar System"?

Is this toilet slogan correct usage of the English language?

Why did the HMS Bounty go back to a time when whales are already rare?

Fear of getting stuck on one programming language / technology that is not used in my country

Problem with TransformedDistribution

Redundant comparison & "if" before assignment

How much character growth crosses the line into breaking the character

Did arcade monitors have same pixel aspect ratio as TV sets?

What should you do if you miss a job interview (deliberately)?

How can Trident be so inexpensive? Will it orbit Triton or just do a (slow) flyby?

Loading commands from file

Approximating irrational number to rational number

Non-trope happy ending?



Is storing any type of function in one variable possible?


What are the differences between a pointer variable and a reference variable in C++?What's the difference between a method and a function?What is the naming convention in Python for variable and function names?var functionName = function() vs function functionName() What is the scope of variables in JavaScript?How do you check if a variable is an array in JavaScript?Set a default parameter value for a JavaScript functionHow to determine if variable is 'undefined' or 'null'?How to check if a variable is set in Bash?JavaScript check if variable exists (is defined/initialized)













11















I'm trying to make a menu array where each element is a struct that stores variables for text, key that needs to be pressed to select that item and function called on that key press (something like "Quit", 'Q', Quit()). I thought this would make things more efficient, but I can't find a way to make it work with varied function and parameter types (for example one item should be able to call a void function with no parameters, another a class int function with two parameters and so on). Is there a good way to do this or am I better off giving up on the idea?



Edit: Thank you all for your advice! The proposed solutions feel a little too complex for my newbie self, but attempting to understand them gave me some ideas! I ended up making the third variable hold an enum instead of a direct function call and then created a switch function that calls other functions based on that value.










share|improve this question









New contributor




Rhyme is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 2





    You can use a lambda expression that calls your actual function

    – Liran Funaro
    Mar 19 at 9:55






  • 1





    Where do the class instance and the two parameters come from?

    – Bergi
    Mar 19 at 13:54






  • 3





    Look up the Command pattern. Note that I’m not saying not to use a function for this. But this pattern is the generalised form of what you need.

    – Konrad Rudolph
    Mar 19 at 14:32











  • Note that a interface with a single method is roughly equivalent to a std::function type.

    – Caleth
    Mar 19 at 14:55















11















I'm trying to make a menu array where each element is a struct that stores variables for text, key that needs to be pressed to select that item and function called on that key press (something like "Quit", 'Q', Quit()). I thought this would make things more efficient, but I can't find a way to make it work with varied function and parameter types (for example one item should be able to call a void function with no parameters, another a class int function with two parameters and so on). Is there a good way to do this or am I better off giving up on the idea?



Edit: Thank you all for your advice! The proposed solutions feel a little too complex for my newbie self, but attempting to understand them gave me some ideas! I ended up making the third variable hold an enum instead of a direct function call and then created a switch function that calls other functions based on that value.










share|improve this question









New contributor




Rhyme is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 2





    You can use a lambda expression that calls your actual function

    – Liran Funaro
    Mar 19 at 9:55






  • 1





    Where do the class instance and the two parameters come from?

    – Bergi
    Mar 19 at 13:54






  • 3





    Look up the Command pattern. Note that I’m not saying not to use a function for this. But this pattern is the generalised form of what you need.

    – Konrad Rudolph
    Mar 19 at 14:32











  • Note that a interface with a single method is roughly equivalent to a std::function type.

    – Caleth
    Mar 19 at 14:55













11












11








11








I'm trying to make a menu array where each element is a struct that stores variables for text, key that needs to be pressed to select that item and function called on that key press (something like "Quit", 'Q', Quit()). I thought this would make things more efficient, but I can't find a way to make it work with varied function and parameter types (for example one item should be able to call a void function with no parameters, another a class int function with two parameters and so on). Is there a good way to do this or am I better off giving up on the idea?



Edit: Thank you all for your advice! The proposed solutions feel a little too complex for my newbie self, but attempting to understand them gave me some ideas! I ended up making the third variable hold an enum instead of a direct function call and then created a switch function that calls other functions based on that value.










share|improve this question









New contributor




Rhyme is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












I'm trying to make a menu array where each element is a struct that stores variables for text, key that needs to be pressed to select that item and function called on that key press (something like "Quit", 'Q', Quit()). I thought this would make things more efficient, but I can't find a way to make it work with varied function and parameter types (for example one item should be able to call a void function with no parameters, another a class int function with two parameters and so on). Is there a good way to do this or am I better off giving up on the idea?



Edit: Thank you all for your advice! The proposed solutions feel a little too complex for my newbie self, but attempting to understand them gave me some ideas! I ended up making the third variable hold an enum instead of a direct function call and then created a switch function that calls other functions based on that value.







c++ function variables






share|improve this question









New contributor




Rhyme is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Rhyme is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited Mar 19 at 20:03







Rhyme













New contributor




Rhyme is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked Mar 19 at 9:51









RhymeRhyme

565




565




New contributor




Rhyme is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Rhyme is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Rhyme is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







  • 2





    You can use a lambda expression that calls your actual function

    – Liran Funaro
    Mar 19 at 9:55






  • 1





    Where do the class instance and the two parameters come from?

    – Bergi
    Mar 19 at 13:54






  • 3





    Look up the Command pattern. Note that I’m not saying not to use a function for this. But this pattern is the generalised form of what you need.

    – Konrad Rudolph
    Mar 19 at 14:32











  • Note that a interface with a single method is roughly equivalent to a std::function type.

    – Caleth
    Mar 19 at 14:55












  • 2





    You can use a lambda expression that calls your actual function

    – Liran Funaro
    Mar 19 at 9:55






  • 1





    Where do the class instance and the two parameters come from?

    – Bergi
    Mar 19 at 13:54






  • 3





    Look up the Command pattern. Note that I’m not saying not to use a function for this. But this pattern is the generalised form of what you need.

    – Konrad Rudolph
    Mar 19 at 14:32











  • Note that a interface with a single method is roughly equivalent to a std::function type.

    – Caleth
    Mar 19 at 14:55







2




2





You can use a lambda expression that calls your actual function

– Liran Funaro
Mar 19 at 9:55





You can use a lambda expression that calls your actual function

– Liran Funaro
Mar 19 at 9:55




1




1





Where do the class instance and the two parameters come from?

– Bergi
Mar 19 at 13:54





Where do the class instance and the two parameters come from?

– Bergi
Mar 19 at 13:54




3




3





Look up the Command pattern. Note that I’m not saying not to use a function for this. But this pattern is the generalised form of what you need.

– Konrad Rudolph
Mar 19 at 14:32





Look up the Command pattern. Note that I’m not saying not to use a function for this. But this pattern is the generalised form of what you need.

– Konrad Rudolph
Mar 19 at 14:32













Note that a interface with a single method is roughly equivalent to a std::function type.

– Caleth
Mar 19 at 14:55





Note that a interface with a single method is roughly equivalent to a std::function type.

– Caleth
Mar 19 at 14:55












2 Answers
2






active

oldest

votes


















9














There are actually a few ways of doing this.



One way is to use std::bind to bind all functions to void func(void) then you can store them equally.

The other way is to create a generic function/lambda which will call your function.

To store your functions you can use std::function.



Also consider overriding operator() of your classes.






share|improve this answer






























    1














    The classic way of handling this is to have all the functions take the same parameters, and for those to be very flexible. For example, an integer or enum, and a pointer.



    • your no-parameter function is passed -1 and nullptr and ignores them

    • your multi-parameter function casts the pointer to a pointer to some struct or class that holds all the bits and pieces it needs (and of course your calling code made that instance and passed its address)

    The reason an enum or integer is hoisted out as one of the parameters is that "command type" is a super popular thing to need, so why do all that casting and extracting to get it?



    If you have a performance problem as a result of this approach, then there are others, but this has literally been used for decades in Windows.






    share|improve this answer






















      Your Answer






      StackExchange.ifUsing("editor", function ()
      StackExchange.using("externalEditor", function ()
      StackExchange.using("snippets", function ()
      StackExchange.snippets.init();
      );
      );
      , "code-snippets");

      StackExchange.ready(function()
      var channelOptions =
      tags: "".split(" "),
      id: "1"
      ;
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function()
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled)
      StackExchange.using("snippets", function()
      createEditor();
      );

      else
      createEditor();

      );

      function createEditor()
      StackExchange.prepareEditor(
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader:
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      ,
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      );



      );






      Rhyme is a new contributor. Be nice, and check out our Code of Conduct.









      draft saved

      draft discarded


















      StackExchange.ready(
      function ()
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55238001%2fis-storing-any-type-of-function-in-one-variable-possible%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      9














      There are actually a few ways of doing this.



      One way is to use std::bind to bind all functions to void func(void) then you can store them equally.

      The other way is to create a generic function/lambda which will call your function.

      To store your functions you can use std::function.



      Also consider overriding operator() of your classes.






      share|improve this answer



























        9














        There are actually a few ways of doing this.



        One way is to use std::bind to bind all functions to void func(void) then you can store them equally.

        The other way is to create a generic function/lambda which will call your function.

        To store your functions you can use std::function.



        Also consider overriding operator() of your classes.






        share|improve this answer

























          9












          9








          9







          There are actually a few ways of doing this.



          One way is to use std::bind to bind all functions to void func(void) then you can store them equally.

          The other way is to create a generic function/lambda which will call your function.

          To store your functions you can use std::function.



          Also consider overriding operator() of your classes.






          share|improve this answer













          There are actually a few ways of doing this.



          One way is to use std::bind to bind all functions to void func(void) then you can store them equally.

          The other way is to create a generic function/lambda which will call your function.

          To store your functions you can use std::function.



          Also consider overriding operator() of your classes.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Mar 19 at 9:58









          Petar VelevPetar Velev

          1,673719




          1,673719























              1














              The classic way of handling this is to have all the functions take the same parameters, and for those to be very flexible. For example, an integer or enum, and a pointer.



              • your no-parameter function is passed -1 and nullptr and ignores them

              • your multi-parameter function casts the pointer to a pointer to some struct or class that holds all the bits and pieces it needs (and of course your calling code made that instance and passed its address)

              The reason an enum or integer is hoisted out as one of the parameters is that "command type" is a super popular thing to need, so why do all that casting and extracting to get it?



              If you have a performance problem as a result of this approach, then there are others, but this has literally been used for decades in Windows.






              share|improve this answer



























                1














                The classic way of handling this is to have all the functions take the same parameters, and for those to be very flexible. For example, an integer or enum, and a pointer.



                • your no-parameter function is passed -1 and nullptr and ignores them

                • your multi-parameter function casts the pointer to a pointer to some struct or class that holds all the bits and pieces it needs (and of course your calling code made that instance and passed its address)

                The reason an enum or integer is hoisted out as one of the parameters is that "command type" is a super popular thing to need, so why do all that casting and extracting to get it?



                If you have a performance problem as a result of this approach, then there are others, but this has literally been used for decades in Windows.






                share|improve this answer

























                  1












                  1








                  1







                  The classic way of handling this is to have all the functions take the same parameters, and for those to be very flexible. For example, an integer or enum, and a pointer.



                  • your no-parameter function is passed -1 and nullptr and ignores them

                  • your multi-parameter function casts the pointer to a pointer to some struct or class that holds all the bits and pieces it needs (and of course your calling code made that instance and passed its address)

                  The reason an enum or integer is hoisted out as one of the parameters is that "command type" is a super popular thing to need, so why do all that casting and extracting to get it?



                  If you have a performance problem as a result of this approach, then there are others, but this has literally been used for decades in Windows.






                  share|improve this answer













                  The classic way of handling this is to have all the functions take the same parameters, and for those to be very flexible. For example, an integer or enum, and a pointer.



                  • your no-parameter function is passed -1 and nullptr and ignores them

                  • your multi-parameter function casts the pointer to a pointer to some struct or class that holds all the bits and pieces it needs (and of course your calling code made that instance and passed its address)

                  The reason an enum or integer is hoisted out as one of the parameters is that "command type" is a super popular thing to need, so why do all that casting and extracting to get it?



                  If you have a performance problem as a result of this approach, then there are others, but this has literally been used for decades in Windows.







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Mar 19 at 14:35









                  Kate GregoryKate Gregory

                  17.5k74881




                  17.5k74881




















                      Rhyme is a new contributor. Be nice, and check out our Code of Conduct.









                      draft saved

                      draft discarded


















                      Rhyme is a new contributor. Be nice, and check out our Code of Conduct.












                      Rhyme is a new contributor. Be nice, and check out our Code of Conduct.











                      Rhyme is a new contributor. Be nice, and check out our Code of Conduct.














                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid


                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.

                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function ()
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55238001%2fis-storing-any-type-of-function-in-one-variable-possible%23new-answer', 'question_page');

                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Luettelo Yhdysvaltain laivaston lentotukialuksista Lähteet | Navigointivalikko

                      Adding axes to figuresAdding axes labels to LaTeX figuresLaTeX equivalent of ConTeXt buffersRotate a node but not its content: the case of the ellipse decorationHow to define the default vertical distance between nodes?TikZ scaling graphic and adjust node position and keep font sizeNumerical conditional within tikz keys?adding axes to shapesAlign axes across subfiguresAdding figures with a certain orderLine up nested tikz enviroments or how to get rid of themAdding axes labels to LaTeX figures

                      Gary (muusikko) Sisällysluettelo Historia | Rockin' High | Lähteet | Aiheesta muualla | NavigointivalikkoInfobox OKTuomas "Gary" Keskinen Ancaran kitaristiksiProjekti Rockin' High