gpt4 book ai didi

c++ - 推导出指向成员模板参数的指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:17:25 24 4
gpt4 key购买 nike

考虑具有成员变量的类,如下所示:

struct A {
int a;
char b;
};

struct B {
double c;
bool d;
};

是否可以声明一个接受模板的模板类argument 指向声明的任何成员的成员对象指针在上面的类(class)中?接受通用指针到成员对象的类可以是声明和使用如下:

template<typename Class, typename Type, Type (Class::*Member)>
struct Magic
{ };

// Usage:
typedef Magic<A, int, &A::a> MagicWithA_a;

不幸的是,必须传入 Class 和每次都键入 模板参数以使最终指针起作用。

有什么方法可以通过偏特化推导出这些论点,例如?也就是说,如何声明 Magic 类来使以下定义有效吗?

typedef Magic<&B::c> MagicWithB_c;
typedef Magic<&A::b> MagicWithA_b;

最佳答案

在 C++17 中,您可以使用 auto 非类型模板参数:

template<auto p_member>
struct Magic
{ };

在 C++17 之前,只有您实现的更长的变体可以工作。

关于c++ - 推导出指向成员模板参数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48478886/

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