如何用变量名定义宏函数

时间:2014-06-05 09:03:34

标签: c++

我想定义一个像

这样的宏
#define AUTO_FUC(x) void x(){}

定义名为x的函数。

我认为函数名称将被arg x传递的x替换。

AUTO_FUC("test")//it should equal to void test(){} I think

但事实并非如此。

那么如何在C ++中实现呢?


我使用MinGW并使用不同的args两次使用宏。

AUTO_FUC("A")
AUTO_FUC("B")

它没有给我函数A()和B()。编译器告诉我void someClass::x() cannot be overloaded。所以我知道宏不起作用。


谢谢,我意识到虚空“A”()不是正确的功能。我忘记了我将一个宏传递为arg而marco是一个字符串。

还有进一步的问题。我真正想要的是根据变量值创建一个名称函数。变量值可以像string a = a;那样写吗?应该"我是对的吗?因此,如果我使用类似"A"的字符串,在将值传递给marco时,如何使用A创建函数void A()

#include <string>
#include <iostream>

#define AUTO_FUC(x) \
void x() \
{\
    std::cout<<"hi";\
}\

int main()
{
    std::string A = "A";
    AUTO_FUC(A);  //it's equal to AUTO_FUC("A") it wrong
    A(); //So it's undefined;
}

2 个答案:

答案 0 :(得分:2)

[更新:您已编辑了问题,现在显示引用宏参数的代码。下次,在提出问题时尝试发布您的实际代码! ;-P]

您的代码运行正常...请在ideone.com运行here

#include <iostream>

#define AUTO_FUC(x) void x(){ std::cout << "hi!\n"; }
AUTO_FUC(test)

int main()
{
    test();
}

标准输出

hi!

答案 1 :(得分:2)

问题是您没有传递AB(标识符)。您正在传递"A""B"(字符串文字)。宏是文本替换。所以他们扩展到:

void "A"(){}
void "B"(){}

肯定你会同意这不是正确的C ++代码。将其更改为:

AUTO_FUC(A)
AUTO_FUC(B)