gpt4 book ai didi

c++ - 依赖于构造函数的类模板参数

转载 作者:行者123 更新时间:2023-11-28 03:50:46 24 4
gpt4 key购买 nike

使用模板化数字包装结构:

template <int I> struct Num { static const int n = I; };

和一些重载函数:

template <typename T>
Num<0> id(T x) { return Num<0>(); }
Num<1> id(int x) { return Num<1>(); }
Num<2> id(double x) { return Num<2>(); }
Num<3> id(char x) { return Num<3>(); }

我可以初始化 m_i Zod的成员结构使用 decltypeid 的返回参数类型:

template <typename T>
struct Zod {
Zod(T x) { m_i = identity<decltype(id(x))>::type::n; }
int m_i;
};

但是,我真正想要的是 Zod结构将第二个整数模板参数初始化为 m_i 的值被设置为。

template <typename T, int I = ?>
struct Zod { ... }

这似乎是可能的,因为 identity/decltype表达式计算为编译时间常量;例如,这在全局范围内很好:

char c;
static const int g = identity<decltype(id(c))>::type::n;

问题是 x构造函数的参数在 Zod 的范围内不可用的模板声明。可以吗?

最佳答案

这是完全可能的——只需传入 *((T*)nullptr) 即可获得任何类型 T 的左值,而不管其可构造性如何。毕竟,您实际上对构造函数参数所做的就是将其传递给 id,然后传递给 decltype,这在模板中是完全可行的,因为您知道xT

template<typename T, int I = identity<decltype(id(*((T*)nullptr)))>::type::n> struct Zod {
...
};

关于c++ - 依赖于构造函数的类模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5588281/

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