У меня есть шаблон, который предоставляет тип для любого заданного порядка в диапазоне от 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?
Любые предложения?
ли Вы хотите вывести 'Graph' в качестве параметра шаблона шаблона, или если это «Граф», который вы определили раньше? – krzaq
График определен сначала и, следовательно, каждый тип полезной нагрузки. –