我一直在试图理解这个代码模板中的typename U = equal_to <T>是什么意思? STL equal_to <T>使用
template <typename T, typename _Prd = equal_to<T> >
struct Vector3
{
protected:
T i,j,k;
_Prd comp;
public:
//default constructor
Vector3(void);
//explicit constructor
Vector3(const T& ijk);
//explicit constructor
Vector3(const T& i,const T& j,const T& k);
//copy constructor
Vector3(const Vector3<T,_Prd>& copy_from);
//getters
T I() const;
T J() const;
T K() const;
//setters
void I(const T& i);
void J(const T& j);
void K(const T& k);
//get magnitude of vector.
T Magnitude() const;
//angle between I,J (clockwise)
T Direction() const;
//angle between K and I,J
T Elevation() const;
//scale vector to 1
Vector3<T,_Prd>& Normalize();
//vector scale up-to value
Vector3<T,_Prd>& Scale(const T& length);
...
};
我无法理解第一条语句
template <typename T, typename _Prd = equal_to<T> > struct Vector3 {};
这是关于equal_to<T>
的使用,我发现从here和here参考。但仍然没有这样的事情。感谢您的帮助,让我了解这一部分。
更新:
看到的答案,阅读一些文字书后,我的问题变成2个方面。
1.默认模板参数
在C++ 11我们可以提供默认模板参数模板。 C++ primer第5版示例第670
#include <functional>
template <typename T, typename F = less<T> >
int compare (const T &v1, const T &v2, F f = F())
{
if (f(v1, v2) return -1 ;
if (f(v2, v1) return 1 ;
return 0 ;
}
然后我们用这个模板:
bool i = compare(0,42) ;
模板将使用默认的功能较少,对象类实例化。 然而,当我们用自己的目标:
Sales_data item(cin), item2(cin) ;
bool j = compare (item, item2, compareIsbn) ;
则F变成compareIsbn函数对象,而不是。 为了让我在上面的问题中发生同样的情况,这种方式将为模板的用户留下一个入口,以允许他们引入自己的函数对象,在这种情况下,它将用作比较器。
2.谓词
看起来像是默认为==的等价谓词函子。 – chris