我有一个关于指针引用的问题,或者你想怎么称呼它都可以,但首先是一些代码。首先是一个抽象的比较函数模板类:
template <class T> struct BinaryTrivalent {
virtual BinaryTrivalent<T>* clone() const = 0;
virtual int operator()(const T& lhs, const T& rhs) const = 0;
int compare(const int a, const int b) const {
if (a < b)
return LESS_THAN;
else if(a == b)
return MATCH;
return MORE_THAN;
}
};
而它的实际使用:
struct NodePCompare : public BinaryTrivalent<Node*> {
NodePCompare* clone() const { return new NodePCompare(*this); }
int operator()(const Node*& lhs, const Node*& rhs) const {
return compare(lhs, rhs);
}
};
该模板在实际类型上运行良好,但似乎无法像我期望的那样识别运算符,并告诉我
NodePCompare
是抽象的。我以前遇到过这个问题,但我放弃了尝试找出问题所在,只是用另一种类型包装了指针。
现在我可以做同样的事情,但我想了解真正的问题是什么。
我一直在阅读关于这个上下文中
*&
到底意味着什么的内容,除非我没有理解正确,否则这应该可以正常工作。这个链接在理解它方面有所帮助:http://markgodwin.blogspot.co.il/2009/08/c-reference-to-pointer.html
大家有什么想法吗?
NodePCompare
中的operator()
应该是virtual
的。 - Andy Prowlvirtual
关键字只是为了自己记住它,但编译器并不需要。 - Jack