#pragma once #include "pch.h" #define CALL_VIRTUAL(retType, idx, ...) \ vmt::CallVirtual(idx, __VA_ARGS__) namespace vmt { template inline T GetVMethod(uint32_t uIndex, void* pClass) { void** pVTable = *static_cast(pClass); return reinterpret_cast(pVTable[uIndex]); } template inline T CallVirtual(uint32_t uIndex, void* pClass, Args... args) { auto pFunc = GetVMethod(uIndex, pClass); return pFunc(pClass, args...); } } // namespace vmt