使用模板中继图从声明生成函数定义

时间:2018-08-25 23:18:21

标签: c++ templates variadic-templates template-meta-programming variadic-macros

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?
}                            \

我知道提到的here解决方案,但这需要我 在参数类型周围加上括号,我想 尽可能避免这种情况。

我尝试使用可变参数模板,但是它并没有做确切的事情 我想要。

1 个答案:

答案 0 :(得分:0)

template <typename Args...>
int foo(Args&&... args) {
  return myfnc(std::forward<Args>(args)...);
}

如果您愿意的话,可以用宏标记这些定义。