这种部分模板特化有什么问题吗?
template<typename Retval, typename Op, typename... Args>
Retval call_retval_wrapper(CallContext &callctx, Op const op, Args &...args);
template<typename Op, typename ...Args>
bool call_retval_wrapper<bool, Op, Args>(
CallContext &callctx, Op const op, Args &...args) {
(callctx.*op)(args...);
return true;
}
稍后在代码中调用它:
call_retval_wrapper<bool>(callctx, op, args...)
给出以下错误:
src/cpfs/entry.cpp:1908:错误: 函数模板部分 专业化 'call_retval_wrapper
' 不允许的
template<typename Retval, typename Op, typename... Args>
Retval call_retval_wrapper(CallContext &callctx, Op const op, Args &...args);
template<typename Op, typename ...Args>
bool call_retval_wrapper<bool, Op, Args>(
CallContext &callctx, Op const op, Args &...args) {
(callctx.*op)(args...);
return true;
}
Calling this later in the code:
call_retval_wrapper<bool>(callctx, op, args...)
Gives this error:
src/cpfs/entry.cpp:1908: error:
function template partial
specialization
‘call_retval_wrapper<bool, Op, Args>’
is not allowed
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
在 C++ 中,您不能对函数进行部分模板专门化,只能对结构和类进行部分模板专门化。因此,您应该要么进行完全专业化,要么使用具有静态成员函数的类(当然这与函数不同)
您可以使用一些使用类的技巧:
类似的东西
In C++ you can't do partial template specialization for functions, only for structures and classes. So you should either to do full specialization or use classes with static member functions (of course this is not same as functions)
You may use some tricks using classes:
Something like that
您还需要在这一行中解压:
You need to unpack in this line too:
你可以尝试这样的事情(ideone):
我没有阅读完整的C++0x规范,但现在可以部分特化函数吗?
You can try something like this (ideone) :
I didn't read the full C++0x spec, but is it possible to partial specialize function now?