Use Macros to declare extern function, define the function implementation and
fill the function table, this allows us continue using template.