2014-06-05 3 views
-5

Я хочу, чтобы определить, какКак определить функцию марко с именем переменной

Марко
#define AUTO_FUC(x) void x(){} 

определить функцию с именем х.

Я думаю, что имя функции будет заменено на x, переданное arg x.

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

Но это не так.

Итак, как это сделать на C++?


Я использую MinGW и использую marco дважды с разными аргументами.

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

Он не давал мне функцию A() и B(). Компилятор сказал мне void someClass::x() cannot be overloaded .so Я знаю, что марко не работает.


Спасибо, я понимаю, что пустота «A»() не является правильной функцией. Я забыл, что я передаю марко в качестве аргумента, а marco - это строка.

И еще вопрос. Я действительно хочу создать функцию с именем в соответствии с переменным значением. И значение переменной может быть записано как string a = a;? Он должен иметь " Я прав? Итак, если я использую строку, такую ​​как "A", как я могу использовать A для создания функции void A(), когда передаем значение marco?

#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; 
} 
+5

Как вы знаете, что это не сработало? – Angew

+2

[Опубликовать минимальный, полный, действительный пример] (http://stackoverflow.com/help/mcve). – Rakib

+3

AUTO_FUC - интересное имя для этого макроса, что вы хотите сделать? –

ответ

2

Проблема заключается в том, что вы не передаете в A и B (идентификаторы). Вы проходите в "A" и "B" (строковые литералы). Макросы textual замена. Поэтому они распространяются на:

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

Несомненно, вы согласитесь, что это неверный код на C++. Измените его так:

AUTO_FUC(A) 
AUTO_FUC(B) 
2

[UPDATE: вы отредактировали свой вопрос и теперь показываете код, в котором указаны макропараметры. В следующий раз, постарайтесь опубликовать свой реальный код, задавая вопрос! ;-P]

Ваш код работает просто отлично ... увидеть это работает на ideone.com here

#include <iostream> 

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

int main() 
{ 
    test(); 
} 

STDOUT

hi! 
Смежные вопросы