https://www.cppbetterexplained.com/posts/cpp-function-pointers/