Passing a function another function

I would use a class to represent drinks. That way, you can represent most recipes just by storing different data; but if you really do need special steps for some drinks, you can override the function that does the dispensing and mixing as well - which is neater than using function pointers.

I did consider that, but I'm not sure how you would initialize the necessary array of classes with the drink data at compile time.