テンプレートを使用する必要があるプログラムを作成しようとしていますが、しばらく立ち往生しています。ここに私のコードの一部があります:
template <typename _Type, typename _Comparator = equal_to</*char*/> >
class CSearch {
public:
CSearch();
CSearch(const _Comparator & cmp);
void Add(int id,
const _Type & needle);
set<int> Search(const _Type & hayHeap) const;
private:
struct CSElem {
int id;
_Type sekvence;
};
vector<CSElem> data;
_Comparator comp;
};
template <typename _Type, typename _Comparator>
CSearch<_Type, _Comparator>::CSearch() {
comp = _Comparator();
}
.......
template <typename _Type, typename _Comparator>
void CSearch<_Type, _Comparator>::Add(int id, const _Type& needle) {
CSElem temp;
.....
data.push_back(temp);
}
template <typename _Type, typename _Comparator>
set<int> CSearch<_Type, _Comparator>::Search(const _Type& hayHeap) const {
typename _Type::const_iterator j, t;
...... //trying to find out which items of the variable data are part of hayHeap
if (comp(*t, *j)) {
......
}
......
}
/*
*
*/
int main(int argc, char** argv) {
CSearch <string> test1;
test1 . Add(0, "hello");
test1 . Add(1, "world");
test1 . Search("hello world!");
CSearch <vector<int> > test2;
....
}
したがって、問題は、テンプレートに2番目のパラメーターを指定しない場合、テスト変数に格納されている型のコンパレーターは equal_to である必要があるため、文字列の場合は
equal_to<char>
またはintのベクトルの場合
equal_to<int>
私は長い間それについて考えてきましたが、テンプレートを宣言する方法や、前述の機能を備えた他の方法をまだ理解していません。誰かがこれを解決する方法のヒントや例を教えてくれたらとてもうれしいです.
ありがとう