当我尝试使用这样的代码时:
namespace
{
typedef boost::shared_ptr< float > sharedFloat;
}
static bool operator<( const sharedFloat& inOne, float inTwo )
{
return *inOne < inTwo;
}
static void foo()
{
std::vector< sharedFloat > theVec;
std::vector< sharedFloat >::iterator i =
std::lower_bound( theVec.begin(), theVec.end(), 3.4f );
}
我收到一个错误:
error: invalid operands to binary expression ('boost::shared_ptr<float>' and 'float')
(在 的实现中有一个指向 < 比较的指针lower_bound
。)那么,当我提供这些操作数时,为什么它们无效operator<
?
如果我改为使用比较函子,
namespace
{
typedef boost::shared_ptr< float > sharedFloat;
struct Comp
{
bool operator()( const sharedFloat& inOne, float inTwo )
{
return *inOne < inTwo;
}
};
}
static void foo()
{
std::vector< sharedFloat > theVec;
std::vector< sharedFloat >::iterator i =
std::lower_bound( theVec.begin(), theVec.end(), 3.4f, Comp() );
}
然后它编译。我可以那样做,但我想知道为什么第一次尝试失败了。
解决方案后添加: Herb Sutter 的 Namespaces & Interface Principle帮助我更清楚地了解了这些内容。