私はこのコードを理解しようとしています
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>
から参照を見つけました。しかし、それでもこのようなものはありません。この部分を理解するために助けてくれてありがとう。
アップデート:
答えを見て教科書を読んだ後、私の質問は2つの側面に変わります。
1.デフォルトのテンプレート引数
C ++ 11では、デフォルトのテンプレート引数をテンプレートに提供できます。C++プライマー第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) ;
テンプレートは、デフォルトのlessfunction-objectクラスを使用してインスタンス化します。ただし、独自のオブジェクトを使用する場合:
Sales_data item(cin), item2(cin) ;
bool j = compare (item, item2, compareIsbn) ;
次に、Fは代わりにcompareIsbn関数オブジェクトに変わります。上記の私の質問でも同じことが起こるように、この方法では、テンプレートのユーザーに入り口を残して、独自の関数オブジェクトを導入できるようにします。この場合は、コンパレータとして使用されます。
2.述語