gpt4 book ai didi

c++ - Variadic 可变模板模板参数

转载 作者:可可西里 更新时间:2023-11-01 18:27:56 26 4
gpt4 key购买 nike

有没有一种简单的方法来获得可变可变模板模板参数。例如考虑以下函数签名

template<template<typename,size_t...> class Pack, 
typename T, size_t ... Args>
void foo(const Pack<T,Args...>& a);

如果我们想传递两个 Pack,我们现在必须做一个重载

template<template<typename,size_t...> class Pack, 
typename T, size_t ... Args0, size_t ... Args1>
void foo(const Pack<T,Args0...>& a, const Pack<T,Args1...>& b);

现在,如果我们想传递可变数量的 Pack 对象并使用不同的可变参数,该怎么办? Args0...,Args1...,Args2...

所以我在想是否有一种实用的方法可以按照(以下肯定是草图表示)做一些事情。

template<template<typename,size_t...> ... class Pack, typename T,...>  
void foo(const Pack<T,...> ... packs);

最佳答案

我只会使用普通的可变参数模板:

template<typename... Ts>  
void foo(const Ts&... packs) {

}

然后编写一个特征来提取类型和size_t。您可以轻松添加一些辅助别名模板来执行您喜欢的任何操作。

template <typename T> struct extract_args;

template <template <typename, size_t...> class Pack, typename T, size_t... Args>
struct extract_args<Pack<T,Args...>> {
using type = T;
using args = std::index_sequence<Args...>;
};

然后在 foo 中,您可以提取参数并根据需要使用它们。例如,要获取包含包中所有 Tstd::tuple:

using all_ts = std::tuple<typename extract_args<Ts>::type...>;

关于c++ - Variadic 可变模板模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38611823/

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