我想定义一个用于名称比较的模板仿函数,它接受引用和指针。我想将它用于元素容器上的普通 find_if 以及指针容器(不幸的是 ptr_vector 等不是一个选项)。
到目前为止,我发现的最佳解决方案如下。
template <typename U>
class by_name{
public:
by_name(U const& pName):mName(pName) {}
template <class T>
typename boost::disable_if_c<boost::is_pointer<T>::value, bool>::type
operator()(T const& pX){ return pX.getName()== mName;}
template <class T>
typename boost::enable_if_c<boost::is_pointer<T>::value, bool>::type
operator()(T pX){ return pX->getName()== mName;}
private:
U mName;
};
对于不知道 enable_if 的人来说,这看起来很丑陋而且很难理解。有没有更简单的方法来编写这样一个带有指针和引用的仿函数?