overloading operators for STL operations

P

PaulH

I have a std::vector< ICMP_ECHO_REPLY > container that I'd like to be
able to do such wonderful STL operations as max_element(),
accumulate(), greater_equal(), etc... So, I decided I would create a
class to contain that information and overload the necessary operators.

The idea is that I should be able to do something like this:

std::vector< ICMP_ECHO_REPLY > container;
ICMP_ECHO_REPLY reply;
container.push_back( reply );
//...
std::vector< ICMP_ECHO_REPLY >::const_iterator itMax = max_element(
container.begin() container.end() );

Thus far, I've got something like the class below, but I the error:
error C2678: binary '<' : no operator found which takes a left-hand
operand of type 'const CEchoReply' (or there is no acceptable
conversion)

So, first, I'd like to know if there is a better way of doing this.
Second, what is it I'm doing wrong here?

Thanks,
PaulH

class CEchoReply
{
public:
ICMP_ECHO_REPLY _reply;
CEchoReply()
{
ZeroMemory( &_reply, sizeof( ICMP_ECHO_REPLY ) );
};
CEchoReply( const ICMP_ECHO_REPLY& reply )
{
memcpy( &_reply, &reply, sizeof( ICMP_ECHO_REPLY ) );
};
~CEchoReply()
{
};
operator ICMP_ECHO_REPLY() const { return _reply; };
bool operator < ( const ICMP_ECHO_REPLY& lhs )
{
return lhs.RoundTripTime < _reply.RoundTripTime;
};
};
 
B

Ben Voigt

PaulH said:
I have a std::vector< ICMP_ECHO_REPLY > container that I'd like to be
able to do such wonderful STL operations as max_element(),
accumulate(), greater_equal(), etc... So, I decided I would create a
class to contain that information and overload the necessary operators.

The idea is that I should be able to do something like this:

std::vector< ICMP_ECHO_REPLY > container;
ICMP_ECHO_REPLY reply;
container.push_back( reply );
//...
std::vector< ICMP_ECHO_REPLY >::const_iterator itMax = max_element(
container.begin() container.end() );

Thus far, I've got something like the class below, but I the error:
error C2678: binary '<' : no operator found which takes a left-hand
operand of type 'const CEchoReply' (or there is no acceptable
conversion)

So, first, I'd like to know if there is a better way of doing this.
Second, what is it I'm doing wrong here?

Thanks,
PaulH

class CEchoReply
{
public:
ICMP_ECHO_REPLY _reply;
CEchoReply()
{
ZeroMemory( &_reply, sizeof( ICMP_ECHO_REPLY ) );
};
CEchoReply( const ICMP_ECHO_REPLY& reply )
{
memcpy( &_reply, &reply, sizeof( ICMP_ECHO_REPLY ) );
};
~CEchoReply()
{
};
operator ICMP_ECHO_REPLY() const { return _reply; };
bool operator < ( const ICMP_ECHO_REPLY& lhs )
bool operator < ( const ICMP_ECHO_REPLY& lhs ) const // <<- need the word
const there
 
D

David Wilkinson

PaulH said:
I have a std::vector< ICMP_ECHO_REPLY > container that I'd like to be
able to do such wonderful STL operations as max_element(),
accumulate(), greater_equal(), etc... So, I decided I would create a
class to contain that information and overload the necessary operators.

Paul:

Please don't multi-post.

You have a lot of answers in microsoft.public.vc.language.

David Wilkinson
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top