오늘 받은 코드는 패킷을 다음과 같이 정의해서 쓰고 있다.
struct Packet
{
unsigned type;
unsigned size;
};
#define PACKET_DECLARE(_packet,_type) _packet() \
{ type = _type; size = sizeof(_packet); }
struct PacketXXX : public Packet
{
int BlahBlah;
PACKET_DECLARE(PacketXXX, IDPKT_XXX)
};
그런데 난 다음과 같은 방식을 더 선호한다.
template < class P, unsigned T >
struct Packet
{
unsigned type;
unsigned size;
Packet() { type = T; size = sizeof(P) }
};
struct PacketXXX
: public Packet < PacketXXX, IDPKT_XXX >
{
int BlahBlah;
};
여러모로 템플릿은 매크로의 유용한 대체 수단이 된다. 그런데 뭐가 더 좋은지는 각자의 선호도에 달린 문제니까, 뭐라 평가는 못하겠지만, 대안이 있음을 알고 있다는 것은 더 좋은 일임에 분명하다.