gpt4 book ai didi

c++ - 迭代 C++ 可变参数模板

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

我有以下内容:

template<typename FIRST, typename SECOND>
Sender *createSenderChain() {
return new FIRST(new SECOND());
}

是否可以使模板可变:

template<typename FIRST, typename ...Args>
Sender *createSenderChain() {
return new FIRST(new SECOND(new THIRD(new ...)) <-- This is the pattern I want,
but how should it be done
using the args list?
}

最佳答案

您可以为此使用递归!

猜测您对 Sender 的定义:

struct Sender { ~Sender() {} };

struct A : Sender { A(Sender* = nullptr) {} };
struct B : Sender { B(Sender* = nullptr) {} };
struct C : Sender { C(Sender* = nullptr) {} };


// Base case
template <typename T>
Sender* createSenderChain()
{
return new T();
}

// Recursive case
template <typename T1, typename T2, typename ...Ts>
Sender* createSenderChain()
{
return new T1(createSenderChain<T2, Ts...>());
}

int main()
{
auto ptr = createSenderChain<A, B, C>();
}

( live demo )

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

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