#ifndef GEODE_CORE_META_THISCALL_HPP #define GEODE_CORE_META_THISCALL_HPP namespace geode::core::meta::x86 { template class Thiscall { private: template static Ret __thiscall wrapper(Args... all) { return detour(all...); } public: static Ret invoke(void* address, Args... all) { Ret(__thiscall * raw)(Args...) = reinterpret_cast(address); return raw(all...); } template static auto get_wrapper() { return reinterpret_cast(&wrapper); } }; } #endif /* GEODE_CORE_META_THISCALL_HPP */