gpt4 book ai didi

c++ - 嵌套模板类型

转载 作者:搜寻专家 更新时间:2023-10-31 01:14:30 29 4
gpt4 key购买 nike

我想要求模板类型是模板类型:

template < template < int beta, typename gamma> class alpha >
gamma foo()
{
// do stuff with beta, gamma
gamma c[beta];
alpha a();
alpha b();
}

我想让 gamma 和 beta 由我给出的值决定,所以:

foo< hello<2,double> >()

将创建一个 hello<2,double>对象而不是 alpha , 和 c将是 double 的数组有 2 个元素。

所以,我想从传递给 foo 的模板类中提取模板参数。

我该怎么做?

最佳答案

您提供的模板声明采用所谓的模板模板参数(模板类型的模板参数)。然而,您提供的用法示例试图将“普通”类作为参数传递(一旦所有模板参数都固定,模板类就会变成“普通”类,它不再是模板)。

这立即意味着 template-template 参数不是您所需要的。模板-模板参数服务于完全不同的目的。 (这里就不赘述了)。

您的问题的一个可能解决方案是要求参数类通过嵌套类型和常量公开其模板参数。 IE。您的 hello 模板必须包含嵌套常量 beta_value 和嵌套类型名称 gamma_type

template <int BETA, typename GAMMA> class hello 
{
public:
static const int beta_value = BETA;
typedef GAMMA gamma_type;
...
};

在这种情况下,您的函数将使用普通类型模板参数声明

template <typename ALPHA> typename ALPHA::gamma_type foo()
{
// do stuff with beta, gamma
typename ALPHA::gamma_type c[ALPHA::beta_value];
ALPHA a();
ALPHA b();
}

如果某些用户忘记遵守约定,编译器将拒绝编译 foo 并强制该用户更新其参数类的定义。

关于c++ - 嵌套模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11304296/

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