typedef struct tagSerialParam {
DWORD dwBaudRate; // 取り得る値 9600/19200/38400
BYTE byByteSize; // 取り得る値 4/5/6/7/8
・・・ // 上記以外の5個ほどの変数
}SERIAL_PARAM;

CSerialCom::Open(SERIAL_PARAM *pParam)
{
// 引数チェック {・・・}
// dcb構造体に代入
GetCommState(hComm, &dcb);
}

上記のような型が違う可変の引数を複数チェックをする場合、
みなさんならどのように実装しますか?
ケースバイケースと言われそうな気もしてますが、
ソースコードの可読性を優先して実装案をお願い致します。