gpt4 book ai didi

c++ - 带有数据指针的 Variadic 模板模板

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

我有一个类模板,它接受一个类型和一个指向该类型变量的指针:

template <typename arg_t, arg_t* storage>
class Value;

我有一个第二类模板,它采用可变数量的第一类模板:

template <typename... arg_t>
class ValueList;

我想通过偏特化只将类模板 Value 的类型用作 ValueList 的参数。这是我期望的工作:

template <typename... arg_t, arg_t*... storage>
class ValueList<Value<arg_t, storage>...>;

在 Visual C++ 2013 中,我收到错误:'arg_t*': parameter pack cannot be expanded in this context。请注意,这种扩展适用于仅采用类型的模板,IE this ...

template <typename...>
class A;

template <template <typename, typename> class B, typename... C, typename... D>
class A<B<C, D>...> {};

...有效。是什么让这个案例有什么不同,什么是可以达到预期效果的正确语法?

用法:

int a;
float b;

int main(int argc, char** argv) {
ValueList<Value<int, &a>, Value<float, &b> > list;
}

最佳答案

根据§14.1/15 字符串中的代码

template <typename... arg_t, arg_t*... storage>

不允许:

A template parameter pack that is a pack expansion shall not expand a parameter pack declared in the same template-parameter-list. [ Example:

// ...

template<class... T, T... Values> struct static_array;// error: Values expands template type parameter
// pack T within the same template parameter list

—end example ]

关于c++ - 带有数据指针的 Variadic 模板模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20464648/

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