マクロの代わりにテンプレート化された関数を使用できます。これにより、型の安全性が失われません。
template<typename InputType, typename ReturnType>
void SCast(InputType Input, ReturnType &Ret)
{
Ret = static_cast<ReturnType>(Input);
}
template<typename InputType, typename ReturnType>
void DCast(InputType Input, ReturnType &Ret)
{
Ret = dynamic_cast<ReturnType>(Input);
}
template<typename InputType, typename ReturnType>
void RCast(InputType Input, ReturnType &Ret)
{
Ret = reinterpret_cast<ReturnType>(Input);
}
次に、次のように使用できます。
TCustomClassName *cls;
SCast(SenderObject, cls);
.
TCustomClassName *cls;
DCast(SenderObject, cls);
.
TCustomClassName *cls;
RCast(SenderObject, cls);