本文介绍了将可变参数宏转换为可变参数模板函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

给出以下形式的可变参数宏:

Given a variadic macro of the form:

#define MY_CALL_RETURN_F(FType, FId, ...) \
  if(/*prelude omitted*/) {             \
    FType f = (FType)GetFuncFomId(FId); \
    if(f) {                             \
      return f(__VA_ARGS__);            \
    } else {                            \
      throw invalid_function_id(FId);   \
    }                                   \
  }                                     \
/**/

-如何将其重写为可变参数函数模板?

-- how can this be rewritten to a variadic function template?

template<typename FType, typename ...Args>
/*return type?*/ tmpl_call_return_f(MyFunId const& FId, /*what goes here?*/)
{
  ...
  FType f = (FType)GetFuncFomId(FId);
  return f(/*what goes here?*/);
  ...
}

更新:我对如何操作特别感兴趣声明 Args 的引用类型:& const& 还是什么?

Update: I'm specifically interested in how to declare the reference type for the Args: && or const& or what?

更新:请注意,FType应该是普通函数指针。

Update: Note that FType is supposed to be a "plain" function pointer.

推荐答案

它看起来像这样:

template<typename FType, typename ...Args>
std::result_of<FType(Args...)>::type tmpl_call_return_f(MyFunId const& FId, Args... &&args)
{
  FType f = (FType)GetFuncFomId(FId)
  return f(std::forward<Args>(args)...);
}

这篇关于将可变参数宏转换为可变参数模板函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-27 15:25