gpt4 book ai didi

c++ - 具有交替类型的 Variadic 模板参数包

转载 作者:搜寻专家 更新时间:2023-10-31 00:12:20 26 4
gpt4 key购买 nike

我想知道是否可以使用参数包捕获交替参数模式。例如,

template<typename T, size_t U, typename... Args>
class foo<T, U, Args...>
{
public:
foo() : my_T(nullptr), my_U(U) {}

private:
T* my_T;
size_t my_U;
foo<Args...> my_next_foo;
}

所以这是行不通的,因为 Args 是一个只有类型的参数包。有没有办法修改它,以便可以在可变参数模板中正确捕获 typename T, size_t U 模式?谢谢

最佳答案

根据我的经验,作为模板参数的值是二等公民。

使用别名将它们升级到头等舱:

template<std::size_t n>
using size = std::integral_constant<std::size_t, n>;

然后模式匹配:

template<class...>
struct foo;
template<>
struct foo<> {
// empty
};
template<class T, size_t U, typename... Args>
struct foo<T, size<U>, Args...> {
foo() : my_T(nullptr), my_U(U) {}

private:
T* my_T;
size_t my_U;
foo<Args...> my_next_foo;
};

鲍勃是你的叔叔。

但是请注意,将 U 作为模板参数,然后将其存储为运行时值是非常值得怀疑的。

foo 的用户必须:

foo< Chicken, size<3>, Dog, size<17> >

代替

foo< Chicken, 3, Dog, 17 >

关于c++ - 具有交替类型的 Variadic 模板参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30487378/

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