您可以在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实现,并且它很好很容易切换后备是一个最大堆或一个小堆在飞行中而无需复制和粘贴代码两个不同的类。
我知道我可以用宏做到这一点,但唯一的方法我知道如何做到这一点会给我一个最大堆或最小堆,但不是在同一编译中。不过,我可能忽略了一种方式。
你可以做一个基类和具有最大堆/最小堆作为子类,然后让getMaxorMin功能在基类中是虚拟的,并且在max-heap/min-heap中以不同的方式实现它。 – Grammin 2011-03-22 17:03:42