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&lt; bool,Op,Args&gt;' 不允许
答案 0 :(得分:1)
在C ++中,您不能对函数执行部分模板特化,仅适用于结构和类。所以你应该做完全专业化或使用带有静态成员函数的类(当然这与函数不同)
你可以使用一些技巧:
template<typename Retval, typename Op, typename... Args>
struct my_traits {
static Retval call_retval_wrapper(CallContext &callctx, Op const op, Args &...args);
};
template<typename Op, typename ...Args>
struct my_traits<bool,Op,Args...> {
static bool call_retval_wrapper<bool, Op, Args>(
CallContext &callctx, Op const op, Args &...args) {
(callctx.*op)(args...);
return true;
}
};
template<typename Retval, typename Op, typename... Args>
Retval call_retval_wrapper(CallContext &callctx, Op const op, Args &...args)
{
return my_traits<Retval,Op,Args...>::call_retval_wrapper(calllxtx,op,args...);
}
像这样的东西
答案 1 :(得分:0)
你也需要在这行中解压缩:
bool call_retval_wrapper<bool, Op, Args...>(
答案 2 :(得分:0)
您可以尝试这样的事情(ideone):
template<typename Retval, typename Op, typename... Args>
struct call{
static Retval retval_wrapper(Op const op, Args &&...args);
};
template<typename Op, typename ...Args>
struct call<bool, Op, Args...>{
static bool retval_wrapper(Op const op, Args &&...args){
return true;
}
};
int main(){
call<bool, bool, bool>::retval_wrapper(true, true);
}
我没有阅读完整的C ++ 0x规范,但是现在可以部分特化功能吗?