过载解决问题 我想说,已经有大量C++过载问题了,但是在看了论坛和新闻组的其他帖子和一个小时后,我仍然难于应付。
背景 我创建了一个名称空间,称之为a,其中一组类具有实现<运算符的相同方式。为了避免代码重复,我写了以下内容:过载解决问题 我想说,已经有大量C++过载问题了,但是在看了论坛和新闻组的其他帖子和一个小时后,我仍然难于应付。,c++,operator-overloading,overload-resolution,C++,Operator Overloading,Overload Resolution,背景 我创建了一个名称空间,称之为a,其中一组类具有实现
namespace A{
template<typename T>
bool operator< (const T&, const T&);
}
问题
问题是当我这样呼叫操作员时:
//example.h
#include "operator_forwards.h"
namespace A{
template<typename T>
class Example{
public:
friend bool operator< <>(const Example<T>&, const Example T&);
private:
T start;
};
}
namespace A{
template<typename T>
bool operator<(const T& lhs, const T& rhs){
using std::operator<;
return lhs.start<rhs.start;
}
}
Example<vector<int>::iterator> ex1(**foo**);
Example<vector<int>::iterator> ex2(**bar**);
ex1<ex2;
示例ex1(**foo**);
示例ex2(**条**);
我谦虚的建议:不要那样做
除了实现A::operator之外,您还需要在更多的地方处理这个问题。请提供一个完整的示例来演示错误的使用。问题与运算符无关这是一个完整的示例,当在该代码段中调用a::operator<并递归地调用自身时,而不是为start成员找到正确的重载OK,我现在明白了。我被“它再次调用它…导致错误”弄糊涂了。对不起,我将进行编辑以使ClearWildlhs.start std::operator
工作?
Example<vector<int>::iterator> ex1(**foo**);
Example<vector<int>::iterator> ex2(**bar**);
ex1<ex2;
template <typename T>
class IterWrapper {
public:
IterWrapper() {}
explicit IterWrapper(T it) : start(it) {}
bool operator< (const IterWrapper<T>& rhs) { return start < rhs.start; }
protected:
T start;
};