【发布时间】:2020-07-05 12:42:02
【问题描述】:
我有一个类用于在游戏引擎中创作一些动画。该动画的变量被编写为const float,如下所示:
const float firstAnimationDuration = 3f;
const float secondAnimationDelay = 1f;
const float secondAnimationDuration = 1f;
在本例中,第一个动画需要 3 秒才能完成,子动画将在第一个动画开始后 1 秒开始,并需要 1 秒才能完成。
动画代码的构建假设secondAnimation 将在firstAnimation 之前完成 - 在这种情况下它会。如果第一个动画完成后第二个动画仍在运行,则系统可能会出现不可预知的行为。
问题是其他人很可能会在以后编辑这些const float,我需要一个好的方法来警告他们这些要求。
我添加了解释要求的 cmets,但理想情况下我会添加某种控制台错误,或者更好的是编译时错误。
我在类初始化器中尝试了以下代码:
if (secondAnimationDelay + secondAnimationDuration > firstAnimationDuration)
{
Debug.LogError ("Second animation cannot be longer than First Animation");
}
但这会导致编译时警告说 Debug.LogError 是无法访问的代码(这是有道理的!),但在这种情况下,警告是防止编译时问题,而不是运行时错误,所以它是 假定的 无法访问。
鉴于我不希望每次构建时都在控制台中留下警告,那么防止更改这些 const 值以避免意外后果的最佳方法是什么?
【问题讨论】:
-
一条评论,你无能为力。
-
如何通过接受这些值并将验证放入构造函数来参数化类?
-
你也可以编写一个单元测试来确保这些事情是有意义的。
-
这将完全消除编译时间常数的想法。并且单元测试也是用户必须运行的东西——但是是的,这是你能做的最好的事情。
-
用
#pragma warning消除警告怎么样?