PavelK
@PavelK

Как написать сложный define?

Приветствую!

приходится писать множество шаблонных функций вот так:

int __myFunct(int a);
int _myFunct(int a);
int myFunct(int a) { return __myFunct(a); }

(тапками не кидать, это для примера)

хотелось бы, что бы написав как-то так:

W_FUNCT(int, myFunct, int a)
но тут же столкнулся с проблемой:
не определяется _functName хотя с functName всё ок
#define W_FUNCT(retType, functName) \
    retType functName() {return  123; } \
    retType _functName() {return 456;} \

UPDT1:
разобрался: _##functName

теперь - как можно в define сделать переменное число параметров c пробелом, например:

W_FUNCT( int, myFunct, int a, int b, int c)
что бы макрос преобразовался в
int myFunct(int a, int b, int c);

UPDT2:
со второй проблемой то же разобрался:
#define W_FUNCT(retType, functName, ...) \
    retType functName(__VA_ARGS__) {return  __##functName(); } \
    retType __##functName() { return 456; } \
    retType _##functName();


теперь нужно как то все значения параметров functName(__VA_ARGS__) передать в вызов функции __functName()

Как можно сделать?
  • Вопрос задан
  • 393 просмотра
Пригласить эксперта
Ответы на вопрос 2
PavelK
@PavelK Автор вопроса
Так, с первой проблемой разобрался:
#define W_FUNCT(retType, functName) \
    retType functName() {return  123; } \
    retType _##functName() {return 456;} \


т.е. вспомнил про конкатанацию строк,

со второй проблемой то же разобрался:
#define W_FUNCT(retType, functName, ...) \
    retType functName(__VA_ARGS__) {return  __##functName(); } \
    retType __##functName() { return 456; } \
    retType _##functName();


т.е. просто многоточие и __VA_ARGS__
Ответ написан
Комментировать
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
приходится писать множество шаблонных функций

Нужно разобраться с промблемой, которая требует такого костыльного решения. И да, это не шаблонные функции.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы