#pragma once #include #include #include namespace mbgl { namespace gl { using ProcAddress = void (*)(); template class ExtensionFunction; template class ExtensionFunction { public: ExtensionFunction(const ProcAddress ptr_) : ptr(ptr_) { } explicit operator bool() const { return ptr; } R operator()(Args... args) const { return (*reinterpret_cast(ptr))(std::forward(args)...); } private: const ProcAddress ptr; }; } // namespace gl } // namespace mbgl