C ++宏-传递字符串并用作变量名

时间:2018-11-10 23:55:18

标签: c++ macros

因此,我正在从事一个小型的业余项目,该项目已经实现了枚举的非常基本的体现。我遇到了一个我正在努力寻找解决方案的问题。

这是我正在寻找的理想电话

<a-entity manager component-a component-b component-c>

第一个参数是一个字符串,该字符串打算附加到变量名上,第二个参数是实际的字符串值

    Reflect_Value("TestStringName", "StringValue")

现在宏将采用第一个参数,并用作object_TestStringName,但是当我在代码中传递字符串时,其结果将评估为无法编译的object_“ TestStringName”。

我在这里做错了什么,或者任何人都可以为我如何获得此功能提供任何解决方案。重要的是要使该名称成为我猜可以识别并且也唯一的名称,这样我才能反映出许多对象

谢谢

2 个答案:

答案 0 :(得分:3)

我认为您可以使用字符串化运算符template <class T> T max(T a, T b) { cout << "2 ..." <<endl; return a > b ? a : b; } template<> char* max(char* a, char* b) { cout << "1 ..." <<endl; return strcmp(a, b) > 0 ? a : b; } int main() { cout << max("Aladdin", "Jasmine") << endl; return 0; } 做您想做的事情:

#

然后您将使用不带引号的参数调用宏:

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

答案 1 :(得分:0)

不传递字符串,而是将其字符串化:

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

然后:

Reflect_Value(TestStringName, "StringValue")