簡體   English   中英

從成員地址推導struct模板類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM