gpt4 book ai didi

c++ - 从成员地址推导结构模板类型

转载 作者:行者123 更新时间:2023-12-01 14:25:39 25 4
gpt4 key购买 nike

我正在为游戏引擎编写一个静态反射库(这是一个空闲时间的个人项目)。请注意,我使用的是 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。

最佳答案

你很幸运拥有 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>;

关于c++ - 从成员地址推导结构模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61480746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com