Ответ 1
#define GENERATE_FUNCTION(Argument) void func_##Argument(){ ... }
Дополнительная информация здесь: http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation
Я хотел бы сделать что-то вроде этого:
class SomeClass { };
GENERATE_FUNTION(SomeClass)
Макрос GENERATE_FUNCTION
Я хотел бы определить функцию, имя которой должно определяться аргументом macro. В этом случае я бы хотел, чтобы он определял функцию func_SomeClass
. Как это можно сделать?
#define GENERATE_FUNCTION(Argument) void func_##Argument(){ ... }
Дополнительная информация здесь: http://en.wikipedia.org/wiki/C_preprocessor#Token_concatenation
Как все говорят, вы можете использовать вставку для создания имени в макросе, поместив ##
, где необходимо объединить маркеры вместе.
Если препроцессор поддерживает переменные макросы, вы можете также включить тип возвращаемого значения и список параметров:
#define GENERATE_FUNCTION(RET,NAM,...) RET func_##NAM(__VA_ARGS__)
.. так, например:
GENERATE_FUNCTION(int,SomeClass,int val)
.. будет расширяться до:
int func_SomeClass(int val)
#define GENERATE_FUNCTION(class_name) func_##class_name##