Генерация определения функции из декларации с использованием шаблона метапрограммирования - PullRequest
0 голосов
/ 26 августа 2018

C ++ гуру,

У меня есть вопрос метапрограммирования шаблона. Рассмотрим следующее объявление функции.

int foo(const int x[], char *y, size_t size);

Я хотел бы иметь возможность генерировать тело функции следующим образом:

int foo(const int x[], char *y, size_t size)
{
  return myfnc(x, y, size);
}

Есть ли способ сделать это с помощью метапрограммирования шаблона C ++? Я могу «обернуть» объявление в некоторый макрос, но я бы хотел избежать использования макросов, чтобы сделать полное расширение. Например, я был бы счастлив, если Я могу написать что-то вроде:

DEFINE_FNC(foo, const int x[], char *y, size_t size)

, где DEFINE_FNC определяется как

#define DEFINE_FNC(fnc, ...) \
int fnc(__VA_ARGS__) {       \
  return myfnc(__VA_ARGS__); \ // This doesn't work; is there something else that can be done here?
}                            \

Мне известно о упомянутом решении здесь , но это требует от меня добавить скобки вокруг типов параметров, и я хотел бы по возможности избегайте этого.

Я пытался использовать вариадические шаблоны, но это не помогло Я хочу.

1 Ответ

0 голосов
/ 26 августа 2018
template <typename Args...>
int foo(Args&&... args) {
  return myfnc(std::forward<Args>(args)...);
}

У вас может быть макрос, исключающий такие определения, если вы склонны к этому.

...