11/09/21 08:06:20.37
class Message {
SOCKET _dst_socket;
COMMAND _command;
public:
// コンストラクタ、デストラクタ、セッタ、ゲッタ
...
virtual int sizeOf() cosnt { return sizeof( *this ); }
};
class TextMessage : public Message {
char _text[ 16 ];
public:
// コンストラクタ、デストラクタ、セッタ、ゲッタ
...
virtual int sizeOf() const { return sizeof( *this ) }
};
class Server{ ... };
bool Server::send( SOCKET dst_socket, const Message& msg ) {
if( ::send( dst_socket, (char*) &msg, msg.sizeOf(), 0 ) != SOCKET_ERROR ) // このへんで sizeOf() を呼ぶとエラー。sizeof( TextMessage ) とかだとOK
}
class Tester {
public:
static void test( const Message& msg ) { cout << msg.sizeOf() << endl; }
};
int main() {
TextMessage tmsg;
Tester::test( tmsg ); // これはOK
...
}