gpt4 book ai didi

c++ - 模板特化中参数包的大小

转载 作者:行者123 更新时间:2023-11-30 05:21:23 27 4
gpt4 key购买 nike

我有一个模板,它为 0 范围内的任何给定订单提供类型至 MaxOrder .

template <class Graph, int Order> TypeHelper;

这是必要的,因为 TypeHelper<Graph, k>取决于 TypeHelper<Graph, 0> , TypeHelper<Graph, k - 1>TypeHelper<Graph, k + 1> .

Graph是一个可变参数模板,用作 Payload 类型的容器对于任何给定的订单。

template <class... Payloads> Graph;

为了在 TypeHelper<Graph, 0> 终止递归和 TypeHelper<Graph, MaxOrder>这些是专门的。前者很简单,但我不知道如何推导 MaxOrder来自 Payloads... 中的类型数量.
一个明显的解决方案是引入 MaxOrder作为 Graph 的模板参数.
例如:

template <int MaxOrder, class... Payloads> Graph;

template <template <int, class...> class Graph, int MaxOrder, class... Payloads>
struct TypeHelper<Graph<MaxOrder, Payloads...>, MaxOrder>

但我更喜欢这样的东西

template <template <class...> class Graph, class... Payloads>
struct TypeHelper<Graph<Payloads...>, sizeof...(Payloads)>

但这行不通。

进一步阅读:Is sizeof... allowed in template arguments for specialization?

有什么建议吗?

最佳答案

我不确定我是否遇到了问题,但您仍然可以使用从您的实际实现继承的中间类:

template <class Graph, int Order>
struct TypeHelperImpl;

// specializations of TypeHelperImpl

template <typename...>
struct TypeHelper;

template <template <class...> class Graph, class... Payloads>
struct TypeHelper<Graph<Payloads...>, Payloads...>
: TypeHelperImpl<Graph<Payloads...>, sizeof...(Payloads)> {};

关于c++ - 模板特化中参数包的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40172361/

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