Use preprocessor macros to create a general queue implementation