你好我在c ++中构建一个模板,我需要覆盖运算符“<”在模板内部,可以比较我的数据结构中的项目。 任何人都可以告诉我如何覆盖它...我应该发送一个指向模板构造函数内的函数的指针吗? 我有两个模板,第一个是Node模板,它包含一个指向我正在管理的数据的指针。 第二个是Heap模板,它有一个节点矢量*。 在我的实现中,我应该能够比较节点*。
答案 0 :(得分:1)
template<class T> struct A;
template<class T, class U> // Remove U and modify accordingly, if f and s
// have to be of the same type.
bool operator < (A<T> const &f, A<U> const &s){
// have the logic here
return true;
}
template<class T> struct A{
// template<class U> // This is how you define inside a class.
// bool operator < (A<U> const &s){
// have logic here
// return true;
// }
};
int main(){
A<int> a;
A<double> d;
bool b = a < d;
}
答案 1 :(得分:0)
如果模板用于项目类型,则假设它们具有比较器,即* node&lt; *节点。
答案 2 :(得分:0)
在C ++中重载运算符实际上非常简单。您可能希望在节点类中执行的操作是:
template<typename MyData>
class Node {
private:
MyData data_;
// ...
public:
// ...
bool operator < (Node const &rhs) const;
};
// ...
template<typename MyData>
bool Node<MyData>::operator < (Node const &rhs) const {
return data_ < rhs.data_;
}
这会使<
类中的Node
运算符重载一个只调用基础data_
值的<
运算符的版本。
您可以在函数中放入您想要的任何代码,除了它的名称和参数数量,它没有特殊属性。您甚至可以使用它来比较不同的类型或返回不同的值。例如,您可以将此示例中的rhs
更改为int
,然后您可以将节点与整数(例如Node n; if (n < 10) ...
)进行比较。