I did my first operator overloading in C++ today. My code ended up being quite different to the example code that I found, but I think I’m happy with it:
class FileData { public: FileData( const string& path ); static bool LessThan( const FileData& a, const FileData& b ); bool operator< ( const FileData& ); unsigned long size() const { return m_size; } private: unsigned long m_size; char m_md5[ 16 ]; }; static bool operator< ( const FileData& a, const FileData& b ) { return FileData::LessThan( a, b ); } bool FileData::operator< ( const FileData& b ) { return FileData::LessThan( *this, b ); } bool FileData::LessThan ( const FileData& a, const FileData& b ) { unsigned long a_size = a.size(); unsigned long b_size = b.size(); if ( a_size == b_size ) { return memcmp( a.m_md5, b.m_md5, 16 ) < 0; } return a_size < b_size; }
I'm not sure when it becomes either useful or necessary to define the operator both as a static and as a member function. I did both because I wasn't sure what was required.