C++ Macro - pass string and use as a variable name










-1















So i'm working on a small hobby project which i have implemented a very basic reflection of enums. I have come across an issue which i'm struggling to find a solution.



This would be an ideal call which i'm looking for



 Reflect_Value("TestStringName", "StringValue")


the first parameter is a string which is intended to be appended onto a variable name and the second to be the actual string value



#define Reflect_Value(name,t) 
namespace Reflection
static ReflectedObject object_##name = ReflectedObject(name,t);


now the macro would then take that first parameter and be used as object_TestStringName but when i pass the string in the code evaluates to object_"TestStringName" which doesn't compile.



What am i doing wrong here or can anyone provide any solutions to how i could get this functionality please. its important to have the name be something i guess recognisable and also unique so i can reflect many objects



Thanks










share|improve this question

















  • 1





    Maybe lose the quotes around TestStringName?

    – PSkocik
    Nov 10 '18 at 23:59















-1















So i'm working on a small hobby project which i have implemented a very basic reflection of enums. I have come across an issue which i'm struggling to find a solution.



This would be an ideal call which i'm looking for



 Reflect_Value("TestStringName", "StringValue")


the first parameter is a string which is intended to be appended onto a variable name and the second to be the actual string value



#define Reflect_Value(name,t) 
namespace Reflection
static ReflectedObject object_##name = ReflectedObject(name,t);


now the macro would then take that first parameter and be used as object_TestStringName but when i pass the string in the code evaluates to object_"TestStringName" which doesn't compile.



What am i doing wrong here or can anyone provide any solutions to how i could get this functionality please. its important to have the name be something i guess recognisable and also unique so i can reflect many objects



Thanks










share|improve this question

















  • 1





    Maybe lose the quotes around TestStringName?

    – PSkocik
    Nov 10 '18 at 23:59













-1












-1








-1








So i'm working on a small hobby project which i have implemented a very basic reflection of enums. I have come across an issue which i'm struggling to find a solution.



This would be an ideal call which i'm looking for



 Reflect_Value("TestStringName", "StringValue")


the first parameter is a string which is intended to be appended onto a variable name and the second to be the actual string value



#define Reflect_Value(name,t) 
namespace Reflection
static ReflectedObject object_##name = ReflectedObject(name,t);


now the macro would then take that first parameter and be used as object_TestStringName but when i pass the string in the code evaluates to object_"TestStringName" which doesn't compile.



What am i doing wrong here or can anyone provide any solutions to how i could get this functionality please. its important to have the name be something i guess recognisable and also unique so i can reflect many objects



Thanks










share|improve this question














So i'm working on a small hobby project which i have implemented a very basic reflection of enums. I have come across an issue which i'm struggling to find a solution.



This would be an ideal call which i'm looking for



 Reflect_Value("TestStringName", "StringValue")


the first parameter is a string which is intended to be appended onto a variable name and the second to be the actual string value



#define Reflect_Value(name,t) 
namespace Reflection
static ReflectedObject object_##name = ReflectedObject(name,t);


now the macro would then take that first parameter and be used as object_TestStringName but when i pass the string in the code evaluates to object_"TestStringName" which doesn't compile.



What am i doing wrong here or can anyone provide any solutions to how i could get this functionality please. its important to have the name be something i guess recognisable and also unique so i can reflect many objects



Thanks







c++ macros






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 10 '18 at 23:55









user3546481user3546481

427




427







  • 1





    Maybe lose the quotes around TestStringName?

    – PSkocik
    Nov 10 '18 at 23:59












  • 1





    Maybe lose the quotes around TestStringName?

    – PSkocik
    Nov 10 '18 at 23:59







1




1





Maybe lose the quotes around TestStringName?

– PSkocik
Nov 10 '18 at 23:59





Maybe lose the quotes around TestStringName?

– PSkocik
Nov 10 '18 at 23:59












2 Answers
2






active

oldest

votes


















3














I think you can do what you want with the stringification operator #:



#define Reflect_Value(name,t) 
namespace Reflection
static ReflectedObject object_##name = ReflectedObject( #name, #t );


You'd then call the macro with unquoted arguments:



Reflect_Value(TestStringName, StringValue)





share|improve this answer






























    0














    Don't pass a string, but stringize it:



    #define stringize(name) #name
    #define Reflect_Value(name,t)
    namespace Reflection
    static ReflectedObject object_##name = ReflectedObject(stringize (name),t);


    Then:



    Reflect_Value(TestStringName, "StringValue")





    share|improve this answer


















    • 1





      Honest question: when do you actually need the stringize macro, instead of just the stringification operator #? Is it just when there's a chance that name is itself a macro and not a literal, or is it necessary in general?

      – tel
      Nov 11 '18 at 0:07











    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
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53244587%2fc-macro-pass-string-and-use-as-a-variable-name%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









    3














    I think you can do what you want with the stringification operator #:



    #define Reflect_Value(name,t) 
    namespace Reflection
    static ReflectedObject object_##name = ReflectedObject( #name, #t );


    You'd then call the macro with unquoted arguments:



    Reflect_Value(TestStringName, StringValue)





    share|improve this answer



























      3














      I think you can do what you want with the stringification operator #:



      #define Reflect_Value(name,t) 
      namespace Reflection
      static ReflectedObject object_##name = ReflectedObject( #name, #t );


      You'd then call the macro with unquoted arguments:



      Reflect_Value(TestStringName, StringValue)





      share|improve this answer

























        3












        3








        3







        I think you can do what you want with the stringification operator #:



        #define Reflect_Value(name,t) 
        namespace Reflection
        static ReflectedObject object_##name = ReflectedObject( #name, #t );


        You'd then call the macro with unquoted arguments:



        Reflect_Value(TestStringName, StringValue)





        share|improve this answer













        I think you can do what you want with the stringification operator #:



        #define Reflect_Value(name,t) 
        namespace Reflection
        static ReflectedObject object_##name = ReflectedObject( #name, #t );


        You'd then call the macro with unquoted arguments:



        Reflect_Value(TestStringName, StringValue)






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 11 '18 at 0:02









        teltel

        6,61821430




        6,61821430























            0














            Don't pass a string, but stringize it:



            #define stringize(name) #name
            #define Reflect_Value(name,t)
            namespace Reflection
            static ReflectedObject object_##name = ReflectedObject(stringize (name),t);


            Then:



            Reflect_Value(TestStringName, "StringValue")





            share|improve this answer


















            • 1





              Honest question: when do you actually need the stringize macro, instead of just the stringification operator #? Is it just when there's a chance that name is itself a macro and not a literal, or is it necessary in general?

              – tel
              Nov 11 '18 at 0:07
















            0














            Don't pass a string, but stringize it:



            #define stringize(name) #name
            #define Reflect_Value(name,t)
            namespace Reflection
            static ReflectedObject object_##name = ReflectedObject(stringize (name),t);


            Then:



            Reflect_Value(TestStringName, "StringValue")





            share|improve this answer


















            • 1





              Honest question: when do you actually need the stringize macro, instead of just the stringification operator #? Is it just when there's a chance that name is itself a macro and not a literal, or is it necessary in general?

              – tel
              Nov 11 '18 at 0:07














            0












            0








            0







            Don't pass a string, but stringize it:



            #define stringize(name) #name
            #define Reflect_Value(name,t)
            namespace Reflection
            static ReflectedObject object_##name = ReflectedObject(stringize (name),t);


            Then:



            Reflect_Value(TestStringName, "StringValue")





            share|improve this answer













            Don't pass a string, but stringize it:



            #define stringize(name) #name
            #define Reflect_Value(name,t)
            namespace Reflection
            static ReflectedObject object_##name = ReflectedObject(stringize (name),t);


            Then:



            Reflect_Value(TestStringName, "StringValue")






            share|improve this answer












            share|improve this answer



            share|improve this answer










            answered Nov 11 '18 at 0:03









            Matthieu BrucherMatthieu Brucher

            14k32140




            14k32140







            • 1





              Honest question: when do you actually need the stringize macro, instead of just the stringification operator #? Is it just when there's a chance that name is itself a macro and not a literal, or is it necessary in general?

              – tel
              Nov 11 '18 at 0:07













            • 1





              Honest question: when do you actually need the stringize macro, instead of just the stringification operator #? Is it just when there's a chance that name is itself a macro and not a literal, or is it necessary in general?

              – tel
              Nov 11 '18 at 0:07








            1




            1





            Honest question: when do you actually need the stringize macro, instead of just the stringification operator #? Is it just when there's a chance that name is itself a macro and not a literal, or is it necessary in general?

            – tel
            Nov 11 '18 at 0:07






            Honest question: when do you actually need the stringize macro, instead of just the stringification operator #? Is it just when there's a chance that name is itself a macro and not a literal, or is it necessary in general?

            – tel
            Nov 11 '18 at 0:07


















            draft saved

            draft discarded
















































            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%2f53244587%2fc-macro-pass-string-and-use-as-a-variable-name%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

            𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

            Crossroads (UK TV series)

            ữḛḳṊẴ ẋ,Ẩṙ,ỹḛẪẠứụỿṞṦ,Ṉẍừ,ứ Ị,Ḵ,ṏ ṇỪḎḰṰọửḊ ṾḨḮữẑỶṑỗḮṣṉẃ Ữẩụ,ṓ,ḹẕḪḫỞṿḭ ỒṱṨẁṋṜ ḅẈ ṉ ứṀḱṑỒḵ,ḏ,ḊḖỹẊ Ẻḷổ,ṥ ẔḲẪụḣể Ṱ ḭỏựẶ Ồ Ṩ,ẂḿṡḾồ ỗṗṡịṞẤḵṽẃ ṸḒẄẘ,ủẞẵṦṟầṓế