Я нахожусь в ситуации, когда у меня есть файл C++ с помощью макроса, который генерирует несколько функций на лету:Объявить методы C++ вне класса?
#define FUNC_GEN(x,y,z) \
int x(int arg1, float arg2) \
{ \
.... \
} \
\
int y(int arg1, int arg2, int arg3) \
{ \
.... \
} \
\
double z(int arg1, float arg2) \
{ \
.... \
} \
FUNC_GEN(func1,func2,func3) // Hundreds of these
Это создает что-то вроде:
int func1(int arg1, float arg2)
{
....
}
int func2(int arg1, int arg2, int arg3)
{
....
}
double func1(int arg1, float arg2)
{
....
}
У меня есть сотни этих разбросанных по всему файлу. То, что я хотел бы сделать, это изменить FUNC_GEN, чтобы создать сгенерированные функции для определенного класса. Проблема в том, что я понимаю, что функции должны быть объявлены с помощью определения класса. Поскольку это фактически создает функции «на лету», это непросто вставить в определение класса.
Есть ли способ в C++ изменить этот макрос, чтобы сделать эти методы членами класса? Я знаю только один способ (тот, которого я избегаю), который должен выслеживать все эти макросы и вручную добавлять их к определению класса.
Мой наивный подход должен был сделать это:
#define FUNC_GEN(x,y,z) \
private int myclass::x(int arg1, float arg2) \
{ \
.... \
} \
\
private int myclass::y(int arg1, int arg2, int arg3) \
{ \
.... \
} \
\
private double myclass::z(int arg1, float arg2) \
{ \
.... \
} \
Но поскольку они не объявлены с классом, компилятор отказывается позволить, что сборка («Ошибка: класс не имеет ни одного члена»).
Есть причина, почему вы не можете просто вызвать макрос внутри определения класса? Во всяком случае, это плохо пахнет, ИМХО. –
В чем причина этого, что он достиг? –
_ «У меня есть сотни из них, разбросанных по всему файлу» _ wooooooah почему? –