c++,operator < がどこで使われてるか知りたい
参考書は明解C++中級の本324ページです。
テンプレート関数について勉強していますがコード
operator > 演算子がどこでどのように使われているかがわかりません、
コメントにして実行してみた結果sort()のあたりで比較できないとのエラーが出たので
わかったのですがどのような原因でエラー出たのでしょうか?
///////////////////////テンプレート関数のIntTwin.cpp////////////////////////
#ifndef ___class_Twin
#define ___class_Twin
#include <ostream>
#include <utility>
#include <algorithm>
template<class type>class Twin {
private:
type v1;
type v2;
public:
/*コンストラクタ*/
Twin(const type& f = type(),const type& s = type()) : v1(f),v2(s) { }
/*コピーコンストラクタ*/
// Twin(const Twin<type>& t) : v1(t,first()),v2(t.second()){ }
type first()const {
return v1;
}
type& first() {
return v1;
}
type second()const {
return v2;
}
type& second() {
return v2;
}
void set(const type& f, const type& s) {
v1 = f;
v2 = s;
}
type min()const {
return v1 < v2 ? v1 : v2;
}
bool ascending()const {
return v1 < v2;
}
void sort() {
if ( (v1 < v2) != true ) {
std::swap(v1,v2);
}
}
};
/*挿入子*/
template<class type> inline std::ostream& operator<<(std::ostream& os, const Twin<type>& t) {
std::cout << "debug_Twin<type> ";
return os << "[" << t.first() << "," << t.second() << "]";
}
#endif;
////////////////////////////main.cpp/////////////////////////////////////
#include "conio.h"
#include <new>
#include <string>
#include <iostream>
#include "IntTwin.h"
using namespace std;
template<> inline ostream& operator << (ostream& os, const
Twin<string>& st)
{
cout << "debug_Twin<string>";
return os << "[\"" << st.first() << "\""",""\""<< st.second() <<
"\"]";
}
template <class type> bool operator < (const Twin<type>& a, const nTwin<type>& b)
{
if ( a.first() < b.first() ) {
return true;
}
else if ( !(b.first() < a.first()) && (a.second() < b.second()) ) {
return true;//false
}
return false;//true
}
//////////////////////////main関数//////////////////////////
int main() {
Twin< Twin<int> > t1( Twin<int>(36, 57), Twin<int>(23, 48) );
cout << "t1 = " << t1 << "\n";
Twin< Twin<string > > t2( Twin<string>("ABC","XYZ"),Twin<string>("ABC", "ZZZ") );
cout << "t2 = " << t2 << "\n";
cout << "t2の値を変更しています\n";
cout << "新しい第1値の第1値:"; cin >> t2.first().first();
cout << "新しい第1値の第2値:"; cin >> t2.first().second();
cout << "新しい第2値の第1値:"; cin >> t2.first().first();
cout << "新しい第2値の第1値:"; cin >> t2.first().second();
if (!t2.ascending()) {
cout << "第一値<第二値が成立しませんのでソートします。\n";
t2.sort(); // 第一値 < 第二値となるようにソート
cout << "t2は" << t2 << "に変更されました。\n";
}
_getch();
return 0;
}