gpt4 book ai didi

c++ - 如何将模板参数重复附加到类型?

转载 作者:行者123 更新时间:2023-11-28 00:23:15 34 4
gpt4 key购买 nike

我想创建一个元函数,Append采用模板化类型并添加 N T 类型的参数数量到模板,例如,如果我调用 Append<2, int, std::tuple<>>我想得到 std::tuple<int, int> .

这是我尝试过的:

#include <tuple>                                                                

template <int N, typename T, template <class> class Seq, typename... Args>
struct Append;

template <int N, typename T, template <class> class Seq, typename... Args>
struct Append<N, T, Seq<Args...>>
{
using type = Append<N-1, T, Seq<Args..., T>>::type;
};

template <typename T, template<class> class Seq, typename... Args>
struct Append<0, T, Seq<Args...>>
{
using type = Seq<Args...>;
};

// create a big tuple with N number of "int" types in it
using T = Append<2, int, std::tuple<>>::type;

int main()
{
return 0;
}

但是,当我尝试编译它时,我得到:

error: type/value mismatch at argument 3 in template parameter list for ‘template class Seq, class ... Args> struct Append’

我错过了什么?

最佳答案

我将在下面解释一些小错误。这有效:

#include <tuple>                                                                

template <int N, typename T, typename SeqWithArgs>
struct Append;

template <int N, typename T, template <typename...> class Seq, typename... Args >
struct Append<N, T, Seq<Args...> >
{
using type = typename Append<N-1, T, Seq<T,Args...> >::type;
};

template <typename T, template<typename...> class Seq, typename... Args>
struct Append<0, T, Seq<Args...> >
{
using type = Seq<Args...>;
};

// create a big tuple with N number of "int" types in it
using T = Append<2, int, std::tuple<> >::type;

static_assert(std::is_same<T,std::tuple<int,int>>::value,"Didn't work");

int main()
{
return 0;
}

一个问题出现在您的非专用模板类中:您希望它具有三个参数,其中第三个参数实际上是一个类型而不是模板类(将您的调用与 tuple<> 进行比较)。这就是您收到错误的原因,因为您传递了编译器需要模板的类型。

然后,对于特殊化,您现在想要推导出模板模板参数,因此模板及其模板参数的四个模板参数分隔为 SeqArgs实际上是正确的。但是,它必须是可变参数模板类(不仅是您问题中的 template <class> class Seq),否则,一个接一个地添加模板参数将在第二次迭代时失败。

然后,最后,您需要一个 typename在依赖名前 Append<[...]>::type .

关于c++ - 如何将模板参数重复附加到类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26415291/

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