Я пишу стати c библиотеку отражений для игрового движка (это личный проект в свободное время). Обратите внимание, что я использую C ++ 17.
Вместо непосредственного хранения смещений членов класса, я сохраняю адрес члена, используя следующую структуру шаблона:
template<class ClassType, typename MemberType, MemberType ClassType::*AddressValue>
struct MemberAddress
{
typedef MemberType ClassType::* Type;
static constexpr const Type _value = AddressValue;
};
Как я могу переписать его, чтобы он сам выводил ClassType и MemberType, просто написав адрес члена? Я имею в виду, я хочу написать:
struct Vec3 { float x, y, z = 0.f};
typedef MemberAddress<&Vec3::x> MemberAddress_x
вместо
typedef MemberAddress<Vec3, float, &Vec3::x> MemberAddress_x
В идеале решение также будет использовать C ++ 14 и C ++ 11.