Created
April 24, 2024 01:50
Revisions
-
BlenderSleuth created this gist
Apr 24, 2024 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,31 @@ #pragma once // Tricky template trick to access private members. // https://bloglitb.blogspot.com/2011/12/access-to-private-members-safer.html template <typename Tag, typename Tag::Type M> struct TRob { friend typename Tag::Type Get(Tag) { return M; } }; template <typename Tag, typename Member> struct TTagBase { typedef Member Type; friend Type Get(Tag); }; #define DEFINE_ROBBER(ClassName, MemberType, MemberName) \ struct F##MemberName##Tag : TTagBase<F##MemberName##Tag, MemberType ClassName::*> {}; \ template struct TRob<F##MemberName##Tag, &ClassName::MemberName>; \ MemberType& Access##MemberName(ClassName* Object) { return Object->*Get(F##MemberName##Tag()); } // How to use: // DEFINE_ROBBER(AActor, float, LastRenderTime); // float& LastRenderTime = AccessLastRenderTime(ActorPtr); // // With great power comes great responsibility. //