Found a cool thing in C++17 called std::invoke, below are two examples
1. std::invoke(f, x, x1, ..., xn);
2. std::invoke(&World::Init, pWorld, static_cast<uint16>(16), static_cast<uint16>(16));
Basically, it calls
x.f(x1, ..., xn);
if f is a member function of x, and
f(x, x1, ..., xn);
if it is not.
There are apparently talks about making this a native thing...?
Have not had found a use-case for me yet though. Looking forward to the moment I do.