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.