C++ Macro - pass string and use as a variable name
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
add a comment |
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
1
Maybe lose the quotes around TestStringName?
– PSkocik
Nov 10 '18 at 23:59
add a comment |
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
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
c++ macros
asked Nov 10 '18 at 23:55
user3546481user3546481
427
427
1
Maybe lose the quotes around TestStringName?
– PSkocik
Nov 10 '18 at 23:59
add a comment |
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
add a comment |
2 Answers
2
active
oldest
votes
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)
add a comment |
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")
1
Honest question: when do you actually need thestringize
macro, instead of just the stringification operator#
? Is it just when there's a chance thatname
is itself a macro and not a literal, or is it necessary in general?
– tel
Nov 11 '18 at 0:07
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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)
add a comment |
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)
add a comment |
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)
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)
answered Nov 11 '18 at 0:02
teltel
6,61821430
6,61821430
add a comment |
add a comment |
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")
1
Honest question: when do you actually need thestringize
macro, instead of just the stringification operator#
? Is it just when there's a chance thatname
is itself a macro and not a literal, or is it necessary in general?
– tel
Nov 11 '18 at 0:07
add a comment |
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")
1
Honest question: when do you actually need thestringize
macro, instead of just the stringification operator#
? Is it just when there's a chance thatname
is itself a macro and not a literal, or is it necessary in general?
– tel
Nov 11 '18 at 0:07
add a comment |
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")
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")
answered Nov 11 '18 at 0:03
Matthieu BrucherMatthieu Brucher
14k32140
14k32140
1
Honest question: when do you actually need thestringize
macro, instead of just the stringification operator#
? Is it just when there's a chance thatname
is itself a macro and not a literal, or is it necessary in general?
– tel
Nov 11 '18 at 0:07
add a comment |
1
Honest question: when do you actually need thestringize
macro, instead of just the stringification operator#
? Is it just when there's a chance thatname
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
add a comment |
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
1
Maybe lose the quotes around TestStringName?
– PSkocik
Nov 10 '18 at 23:59