55
66struct StructResolver {
77private:
8- template <typename T, int gameAddress> static T instance () ;
8+ template <typename T, int gameAddress> struct Instance ;
99
1010 template <typename T, bool implemented, int gameAddress> struct InternalResolver ;
1111 template <typename T, int gameAddress> struct InternalResolver <T, true , gameAddress> {
12- private:
13- static T instance;
14-
15- public:
1612 static T* const ptr;
1713 };
1814 template <typename T, int gameAddress> struct InternalResolver <T, false , gameAddress> {
@@ -44,9 +40,10 @@ struct StructResolver {
4440
4541template <typename T, int gameAddress>
4642T* const StructResolver::InternalResolver<T, false , gameAddress>::ptr = reinterpret_cast <T*>(gameAddress);
43+
4744template <typename T, int gameAddress>
48- T StructResolver::InternalResolver<T, true , gameAddress>::instance = StructResolver::instance<T, gameAddress>();
49- template < typename T, int gameAddress> T* const StructResolver::InternalResolver <T, true , gameAddress>::ptr = & instance;
45+ T* const StructResolver::InternalResolver<T, true , gameAddress>::ptr
46+ = & StructResolver::Instance <T, gameAddress>::instance;
5047
5148template <int address> bool StructResolver::AddressUsageKeeper<address>::initialized = false ;
5249
@@ -64,7 +61,10 @@ StructResolver::Resolver<T, implemented, gameAddress>::Initializer::Initializer(
6461 template struct StructResolver ::Resolver<STRUCT_TYPE, IMPLEMENTED, GAME_ADDRESS>; \
6562 typedef StructResolver::Resolver<STRUCT_TYPE, IMPLEMENTED, GAME_ADDRESS>::Ptr
6663
67- #define MACRO_STRUCT_INSTANCE (STRUCT_TYPE, GAME_ADDRESS ) \
68- template <> STRUCT_TYPE StructResolver::instance<STRUCT_TYPE, GAME_ADDRESS>()
64+ #define MACRO_STRUCT_INSTANCE (GAME_ADDRESS ) \
65+ template <typename T> struct StructResolver ::Instance<T, GAME_ADDRESS> { \
66+ static T instance; \
67+ }; \
68+ template <typename T> T StructResolver::Instance<T, GAME_ADDRESS>::instance
6969
7070#endif // STRUCT_RESOLVER
0 commit comments