#pragma once #include #include namespace mbgl { namespace android { template class Peer { public: static constexpr auto Name(); static void RegisterNative(jni::JNIEnv&); static T& Get(jni::JNIEnv& env, const jni::Object>& obj) { jni::Field field{ env, javaClass, peer }; return *reinterpret_cast(obj.Get(env, field))->native; } protected: template Peer(Args&&... args) : native(std::make_unique(std::forward(args)...)) { } const std::unique_ptr native; private: static const char* peer; static jni::Class> javaClass; }; template jni::Class> Peer::javaClass; template const char* Peer::peer = "peer"; } // namespace android } // namespace mbgl