【发布时间】:2011-03-22 17:00:56
【问题描述】:
你可以在 C++ 中使用模板(或类似的东西)来指定在函数中执行的操作吗?
我不知道如何更清楚地解释它,所以我将向您展示如何(但不是)在代码中完成:
template <operator OPERATION> int getMaxOrMin(int a, int b) {
return a OPERATION b ? a : b;
}
在哪里找到 a 或 b 的最大值或最小值(这是我的伪语法有点混乱的地方,请耐心等待):
int max = getMaxOrMin< > > (a, b);
int min = getMaxOrMin< < > (a, b);
我知道这根本不是怎么做的(因为它甚至在语法上都没有意义),但我希望这能澄清我想做的事情的类型。
我想知道这一点的原因是我正在制作一个 PriorityQueue 实现,如果无需复制和粘贴代码即可轻松地在支持最大堆或最小堆之间切换会很好不同的类别。
我知道我可以使用宏来做到这一点,但我知道如何做到这一点的唯一方法是给我一个最大堆或一个最小堆,但不能在同一个编译中同时提供。不过,我可能忽略了一条路。
【问题讨论】:
-
你可以创建一个基类,将 max-heap / min-heap 作为子类,然后在基类中将 getMaxorMin 函数设为虚函数,并在 max-heap/min-heap 中以不同方式实现。