c – 为什么enable_if不在这里工作?

前端之家收集整理的这篇文章主要介绍了c – 为什么enable_if不在这里工作?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个代码,我的期望是基于模板参数的类型会有两个不同版本的operator(). @H_404_2@#include <string> #include <type_traits> template<typename T> struct Impl { std::enable_if_t<!std::is_pointer<T>::value,T> operator()(const std::string& key,int node) { return static_cast<T>(); } std::enable_if_t<std::is_pointer<T>::value,int node) { return new T(); } }; int main() { }

相反,我得到一个错误编译:
‘std :: enable_if_t< std :: is_pointer< _Tp> :: value,T> Impl< T> :: operator()(const string&,int)’不能用’std :: enable_if_t<(!std :: is_pointer< _Tp> :: value)重载,int)’

解决方法

您的operator()本身不是函数模板,因此SFINAE没有上下文.试试这个: @H_404_2@template <typename U = T> std::enable_if_t<!std::is_pointer<U>::value,U> operator()(const std::string& key,int node) { return static_cast<U>(); } template <typename U = T> std::enable_if_t<std::is_pointer<U>::value,int node) { return new U(); }

猜你在找的C&C++相关文章