#include <iostream>
#include <utility>
#define APIENTRY
using UINT = unsigned;
typedef UINT(APIENTRY *PFNFOO)(UINT, double);
class Foo
{
public:
static UINT APIENTRY pfnFoo(UINT x, double y)
{
return (UINT)(x*y);
}
};
template<typename RET, typename... PARAMS, typename...Args>
inline RET CallFunc(RET(*pfn)(PARAMS...), Args&&... args)
{
return (*pfn)(std::forward<Args>(args)...);
}
int main()
{
std::cout << CallFunc(&Foo::pfnFoo, 100, 0.5f) << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCiNkZWZpbmUgQVBJRU5UUlkKdXNpbmcgVUlOVCA9IHVuc2lnbmVkOwoKdHlwZWRlZiBVSU5UKEFQSUVOVFJZICpQRk5GT08pKFVJTlQsIGRvdWJsZSk7CgpjbGFzcyBGb28KewpwdWJsaWM6CiAgICBzdGF0aWMgVUlOVCBBUElFTlRSWSBwZm5Gb28oVUlOVCB4LCBkb3VibGUgeSkKICAgIHsKICAgICAgICByZXR1cm4gKFVJTlQpKHgqeSk7CiAgICB9Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBSRVQsIHR5cGVuYW1lLi4uIFBBUkFNUywgdHlwZW5hbWUuLi5BcmdzPgppbmxpbmUgUkVUIENhbGxGdW5jKFJFVCgqcGZuKShQQVJBTVMuLi4pLCBBcmdzJiYuLi4gYXJncykKewogICAgcmV0dXJuICgqcGZuKShzdGQ6OmZvcndhcmQ8QXJncz4oYXJncykuLi4pOwp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6Y291dCA8PCBDYWxsRnVuYygmRm9vOjpwZm5Gb28sIDEwMCwgMC41ZikgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuIDA7Cn0K