c – 如何使用enable_if根据类的template参数启用成员函数
发布时间:2020-12-16 05:19:37 所属栏目:百科 来源:网络整理
导读:代码: templateclass Tstruct is_builtin{ enum {value = 0};};templatestruct is_builtinchar{ enum {value = 1};};templatestruct is_builtinint{ enum {value = 1};};templatestruct is_builtindouble{ enum {value = 1};};templateclass Tstruct My{ ty
代码:
template<class T> struct is_builtin { enum {value = 0}; }; template<> struct is_builtin<char> { enum {value = 1}; }; template<> struct is_builtin<int> { enum {value = 1}; }; template<> struct is_builtin<double> { enum {value = 1}; }; template<class T> struct My { typename enable_if<is_builtin<T>::value,void>::type f(T arg) { std::cout << "Built-in as a param.n"; } typename enable_if<!is_builtin<T>::value,void>::type f(T arg) { std::cout << "Non - built-in as a param.n"; } }; struct A { }; int main() { A a; My<int> m; My<A> ma; m.f(1); ma.f(a); return 0; } 我收到一个错误: error C2039: 'type' : is not a member of 'std::tr1::enable_if<_Test,_Type>' 显然我不明白如何使用enable_if.我在想的是,我可以在编译时从一组成员函数启用一个或第二个成员函数,但是它不起作用.任何人都可以向我解释如何正确执行? 解决方法
您不能使用类模板参数来获取成员函数的SFINAE.
你要么需要 >使成员函数改为成员函数模板,并在成员函数模板的模板参数上使用enable_if>将成员函数f移动到策略类中,并使用enable_if专门化类模板. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |