如何为比较运算符(小于)重载声明模板特化

时间:2015-08-07 07:33:09

标签: c++ operator-overloading template-specialization

我想使用boost :: multi_index :: identity作为我的类指针。因此,我需要一个模板专门化来比较我的类的比较运算符(小于<)。这是我的代码:

class X {
    // class declarations details
};

template <>
bool operator< <X> ( const X* ipLhs, const X* ipRhs)
{
    return ((unsigned int) ipLhs) < (unsigned int) ipRhs);
}

因此我可以将boost :: multi_index_container声明为

typedef boost::multi_index_container
    < X*
    , boost::multi_index::identity<X*>
    > SetOfXs;

不幸的是,它在VC8中产生了一个错误

error C2143: syntax error : missing ';' before '<'

您能否帮助我使用正确的语法为比较运算符(小于)重载声明模板特化?

非常感谢!

1 个答案:

答案 0 :(得分:1)

不,你不能,因为operator <根本不是模板功能。重载将是最佳解决方案:

bool operator< (const X& ipLhs, const X& ipRhs)
{
    ...
}

如果您的意思是std::less,您可以对其进行专门化,但请注意它是模板类。