由运营商填写的模板

Car*_*n42 4 c++ templates operators

您可以在C++中使用模板(或类似)来指定在函数中执行哪些操作?

我不知道如何更清楚地解释它,所以我将告诉你它是如何(但不是)在代码中完成的:

template <operator OPERATION> int getMaxOrMin(int a, int b) {
    return a OPERATION b ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

在哪里找到a或b的最大值或最小值(这是我的伪语法有点混乱的地方,请耐心等待):

int max = getMaxOrMin< > > (a, b);
int min = getMaxOrMin< < > (a, b);
Run Code Online (Sandbox Code Playgroud)

我知道根本不是怎么做的(因为它甚至在语法上都没有意义),但我希望澄清我想要做的事情的类型.

我想知道这个问题的原因是我正在进行PriorityQueue实现,并且很容易在动态切换最大堆或最小堆之间而不复制和粘贴代码来创建两个不同的类.

我知道我可以用宏来做,但是我知道怎么做的唯一方法就是给我一个max-heap或min-heap,但不是两个都在同一个编译中.不过,我可能会忽略一种方式.

Mar*_*k B 8

做什么std::map和朋友做:将比较函数/仿函数作为模板参数.见std::lessstd::greater.

请记住,标准库已经具有良好开发和调试的优先级队列,您可以使用任意比较功能.