是否有可能缩短此声明,因为我经常在我的代码中使用它
例如,我使用此功能使用
将Object
投射到我的CustomObject
dynamic_cast/static_cast<TCustomClassName*>(SenderObject)
是否有可能使用typedef static_cast<TCustomClassName*>
或类似的东西来缩短它,以确保在typedef
中使用强制转换运算符是可能的?
答案 0 :(得分:10)
不,你不能,而你不应该!不要为强制转换操作符定义任何宏,它会使应用程序代码的维护者感到困惑,并会对编程圈造成严重破坏。这些运算符完全有理由提供一种可读的方式来告诉程序员,这里正在发生演员表。无论日常使用的强制转换都会导致程序员之间产生混淆,因此这些关键字可以帮助他们。因此,坚持使用它们并明智地使用它们。不要回复到C风格的转换,这些运算符的目的是提供一种方法来理解代码中发生的事情。如果您不熟悉它们,请阅读:When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?
答案 1 :(得分:1)
您可以使用模板化函数代替宏,这样您就不会失去任何类型的安全性:
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);
答案 2 :(得分:0)
使用IDE的键盘快捷键。例如,在Eclipse中,通过代码完成,只需要几次击键就可以输入static_cast<MyClass*>.
如果您经常需要相同的键盘,您甚至可以定义自己的键盘宏来通过一个热键插入样板。
答案 3 :(得分:0)
这是可能的:
auto ToUi16 = [](auto v)
{
return static_cast<unsigned __int16>(v);
};
但这会使您的代码可读性降低。