[英]struct template type deduction from member address
我正在為游戲引擎編寫 static 反射庫(這是一個空閑時間的個人項目)。 請注意,我使用的是 C++17。
我沒有直接存儲 class 成員偏移量,而是使用此模板結構存儲成員地址:
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。
您很幸運擁有 C++17,在早期版本中這是不可能的,因為解決方案取決於auto
模板參數。 但有了它,它看起來像這樣:
template<class T, T val>
struct MemberAddrHelper;
template<class ClassType, typename MemberType, MemberType ClassType::*AddressValue>
struct MemberAddrHelper<MemberType ClassType::*, AddressValue> {
typedef MemberType ClassType::* Type;
static constexpr const Type _value = AddressValue;
};
template<auto addr>
using MemberAddr = MemberAddrHelper<decltype(addr), addr>;
struct foo {
int bar;
};
using baz = MemberAddr<&foo::bar>;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.