c – 为什么我得错误operator()不能重载?
发布时间:2020-12-16 09:41:24 所属栏目:百科 来源:网络整理
导读:我有两个operator()重载,一个采用函数引用,它接受任何类型作为参数并返回任何类型.另一个采用函数引用,它将任何类型作为参数但返回void.在我的课程实例化后,我得到以下错误: In instantiation of 'Avoid,int': error: 'void AT,F::operator()(void ()(F)) [
我有两个operator()重载,一个采用函数引用,它接受任何类型作为参数并返回任何类型.另一个采用函数引用,它将任何类型作为参数但返回void.在我的课程实例化后,我得到以下错误:
template <typename T,typename F> struct A { void operator()(T (&)(F)) {} void operator()(void (&)(F)) {} }; void f(int) {} int main() { A<void,int> a; a(f); } 这些错误仅在第一个模板参数T为空时发生.我想知道我做错了什么以及为什么我不能以这种方式重载operator()? 解决方法
好吧,如果T无效,那么你有两个函数定义与完全相同的原型 – 打破ODR.
尝试专门化您的结构来防止这种情况: template <typename T,typename F> struct A { void operator()(T (&)(F)) {} void operator()(void (&)(F)) {} }; template <typename F> struct A<void,F> { void operator()(void (&)(F)) {} }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |