allow protected and private create funcs

This commit is contained in:
altalk23 2023-01-30 10:16:55 +03:00
parent f385cc9d43
commit 2f0c36f007
2 changed files with 15 additions and 3 deletions

View file

@ -133,6 +133,11 @@ namespace geode {
Result<tulip::hook::HandlerMetadata, std::string> handlerMetadataForAddress(uintptr_t address);
}
namespace addresser {
template <class Class>
Class* friendCreate();
}
}
#define GEODE_FRIEND_MODIFY \
@ -142,7 +147,9 @@ namespace geode {
template <uint32_t> \
friend uintptr_t geode::modifier::address(); \
friend geode::Result<tulip::hook::HandlerMetadata, std::string> \
geode::modifier::handlerMetadataForAddress(uintptr_t address);
geode::modifier::handlerMetadataForAddress(uintptr_t address); \
template <class Class> \
friend Class* geode::addresser::friendCreate();
#define GEODE_ADD(...) __VA_ARGS__

View file

@ -28,7 +28,12 @@ namespace geode::addresser {
inline F rthunkAdjust(T func, F self);
template <class Class>
concept HasCreate = requires() { Class::create(); };
Class* friendCreate() {
return Class::create();
}
template <class Class>
concept HasCreate = requires() { addresserFriendCreate<Class>(); };
class GEODE_DLL Addresser final {
template <char C>
@ -70,7 +75,7 @@ namespace geode::addresser {
template <class Class>
requires(HasCreate<Class>)
static Class* generateInstance() {
return Class::create();
return friendCreate<Class>();
}
template <class Class>