我试图明确限制我正在创建的课程的最大尺寸,并提出了似乎有效但似乎难看的解决方案。这个例子有点人为,但我想知道情况是否会更自然地出现。
这是原样:
PriorityQueue(const unsigned int maxSizeIn) :
maxSize((maxSizeIn >= SOME_CONSTANT) ? SOME_CONSTANT - 1 : maxSizeIn),
queueArray(new PriorityPair<T>*[maxSizeIn]()),
currentHeapSize(0)
{
}
笨拙来自于在初始化列表中使用三元表达式。虽然这确实有效,但看起来并不是特别好,迫使我按行分隔列表中的每个组件。我试图将这个逻辑移到构造函数的主体中,但是我遇到了如何尝试这个问题。
为了清楚起见,我已经编辑了原文,以便更好地突出我所要求的内容。也就是说,是否存在一种功能上等效的方法,可以将约束放在初始化列表上。
这样的问题应该是什么样的解决方案?
答案 0 :(得分:0)
您可以使用std::min
:
maxSize(std::min(maxSizeIn, std::numeric_limits<unsigned int>::max() - 1));
此处,std::numeric_limits<unsigned int>::max() - 1
可以是任何常量 - 在您的示例中为SOME_CONSTANT
。
虽然注意到它在你的情况下没有任何意义。 maxSizeIn
永远不会超过其类型的最大值。如果有人要为你的构造函数指定一个大于std::numeric_limits<unsigned int>::max()
的大小,那么这个人会很快注意到他们的参数已经溢出。
但你可以传递unsigned long
。