本文介绍了将可变参数宏转换为可变参数模板函数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
给出以下形式的可变参数宏:
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)...);
}
这篇关于将可变参数宏转换为可变参数模板函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!