Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Template filled by an operator

Can you use templates (or the like) in C++ to specify which operation is done in a function?

I don't know how to explain it more clearly, so I'll show you how it could be (but isn't) done in code:

template <operator OPERATION> int getMaxOrMin(int a, int b) {
    return a OPERATION b ? a : b;
}

where finding the maximum or the minimum of a or b would be (this is where my pseudo-syntax gets a little confusing, bear with me):

int max = getMaxOrMin< > > (a, b);
int min = getMaxOrMin< < > (a, b);

I know that's not how to do it at all (because it doesn't even syntactically make sense), but I hope that clarifies the type of thing I want to do.

The reason behind me wondering this is I'm making a PriorityQueue implementation, and it would be nice to easily switch between the backing being a max-heap or a min-heap on the fly without copying and pasting code to make two different classes.

I know I could do it with a macro, but the only way I'd know how to do that would give me either a max-heap or a min-heap, but not both in the same compilation. I'm probably overlooking a way, though.

like image 461
Carrotman42 Avatar asked Dec 27 '22 23:12

Carrotman42


1 Answers

Do what std::map and friends do: Take a comparison function/functor as your template parameter. See std::less and std::greater.

Do remember that the standard library already has a well developed and debugged priority queue that you can use with an arbitrary comparison function.

like image 104
Mark B Avatar answered Jan 16 '23 18:01

Mark B