Я бы хотел сделать что-то вроде этого:
class SomeClass { };
GENERATE_FUNTION(SomeClass)
Макрос GENERATE_FUNCTION
Я хотел бы определить функцию, имя которой должно определяться аргументом макроса. В этом случае я бы хотел определить функцию func_SomeClass
. Как это можно сделать?
Как все говорят, вы можете использовать вставку токенов для создания имени в макросе, поместив ##
там, где необходимо, чтобы соединить токены вместе.
Если препроцессор поддерживает макросы с переменным числом, вы также можете включить тип возвращаемого значения и список параметров:
#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##