将可变参数宏转换为可变参数模板函数?
给定以下形式的可变参数宏:
#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); \
} \
} \
/**/
-- 如何将其重写为可变参数函数模板?
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&
或者什么?
更新:请注意,FType 应该是一个“普通”函数指针。
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?*/);
...
}
Update: I'm specifically interested in how to declare the reference type for the Args
: &&
or const&
or what?
Update: Note that FType is supposed to be a "plain" function pointer.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
它看起来像这样:
It would look something like this:
如果您使用
std::function
作为FType
,那么这应该可以工作:If you use
std::function
asFType
, then this should work: