사용자 정의 클래스 이진 검색 트리가 있습니다. 비교기 클래스를 인수로 전달하려고합니다 (기본적으로 std :: less 임). 검색된 대부분의 답변은 STL 개체를 사용하고 사용자 지정 비교자를 전달합니다. 나는 다른 것을 원한다.STL처럼 사용자 정의 클래스 용 사용자 정의 비교기
// Tree 클래스
template <class T,class Compare = less<T>>
class Tree
{
struct TreeNode
{
T data;
struct TreeNode * left;
struct TreeNode * right;
};
public:
void insert(T);
};
// 사용자 정의 비교 클래스
template <class T>
class CustomCompare
{
public:
bool compare(const T&, const T &);
};
template<class T>
bool CustomCompare<T>::compare(const T & a, const T &b)
{
cout << "calling custom comparator";
return a<b;
}
// 트리에 삽입하는
template<class T,class Compare>
void Tree<T,Compare>::insert(T val)
{
// HOW DO I CALL COMPARE HERE? I tried this
if (compare(val->data , treeNode->data)) /// does not work.
// I get error - use of undeclared identifier compare.
//IF I DO THIS, I get error - expected unqualified id
Compare<T> x; // cannot create instance of Compare
// IF I DO THIS< I can create instance of Compare but cannot call function compare.
Compare x;
x.compare(....) -- Error no member named compare in std::less
}
내가 할 수 없습니다 내가 원하는대로 CustomCompare::compare
정적 코드 std :: less에서도 작동합니다.
나는이 질문이 분명하기를 바랍니다.
참고 : 사용하게 될 클래스에 대해 operator <
을 오버로드 할 수 있음을 알고 있습니다. 해당 클래스의 소스 코드를 사용할 수없는 경우 상황에 대비하고 있습니다.
:로
그런 다음, 당신은 그것을 사용할 수 있습니다. – Brian
그럴 경우 오류가 발생합니다. std :: less에서 명명 된 멤버가 없습니다. –