我已经用C++编程了几年,我已经使用了很多STL并且已经创建了我自己的模板类几次以了解它是如何完成的.
现在我正在尝试将模板更深入地集成到我的OO设计中,一个唠叨的想法不断回到我身边:它们只是一个宏,真的......你可以使用#defines实现(而不是UGLY)auto_ptrs,如果你真的想要.
这种思考模板的方式有助于我理解我的代码将如何实际工作,但我觉得我必须以某种方式忽略这一点.宏是邪恶的化身,但"模板元编程"风靡一时.
那么,真正的区别是什么?模板如何避免#define引导你进入的危险,比如
我正在寻找一些有效实现的优秀C代码:
while (deltaPhase >= M_PI) deltaPhase -= M_TWOPI;
while (deltaPhase < -M_PI) deltaPhase += M_TWOPI;
Run Code Online (Sandbox Code Playgroud)
我有什么选择?
我有一个代表形状的类.Shape类有一个名为Angle的属性.我希望此属性的setter自动将值包装到范围[0,359]中.
不幸的是,简单_Angle = value % 360;只适用于正数.在C#中-40 % 360 == -40.谷歌calc 以我想要的方式做到了.值应为320.
什么是C#中最优雅的解决方案?
这是我到目前为止最好的方式:
public double Angle {
get { return _Angle; }
set {
if ( value >= 0 ) {
_Angle = value % 360;
}
else {
_Angle = value - (360 * ((int)(value / 360) - 1));
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:
谢谢你们,我现在有:
public double Angle {
get { return _Angle; }
set {
_Angle = (value % 360) + ((value < 0) …Run Code Online (Sandbox Code Playgroud)