过载解决问题 我想说,已经有大量C++过载问题了,但是在看了论坛和新闻组的其他帖子和一个小时后,我仍然难于应付。

过载解决问题 我想说,已经有大量C++过载问题了,但是在看了论坛和新闻组的其他帖子和一个小时后,我仍然难于应付。,c++,operator-overloading,overload-resolution,C++,Operator Overloading,Overload Resolution,背景 我创建了一个名称空间,称之为a,其中一组类具有实现

背景

我创建了一个名称空间,称之为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,我现在明白了。我被“它再次调用它…导致错误”弄糊涂了。对不起,我将进行编辑以使ClearWild
lhs.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;
};