gpt4 book ai didi

c++ - 从另一个可变参数模板制作可变参数模板

转载 作者:行者123 更新时间:2023-12-01 12:36:30 25 4
gpt4 key购买 nike

老实说,我不知道如何开始寻找我要解决的问题的解决方案。可能已经有解决方案了。任务就在这里。

我有一个实际上是带有2个参数的模板的类:

template <typename F, typename S>
class trans {...};

我还有另一个类,其中包含一个像元组(例如)这样的“trans”类的链:

class holder {
using chain_type = std::tuple<trans<std::string, int>,
trans<int, float>,
trans<float, std::string>,
trans<std::string, json>>;
};

可以看出,“trans”的第二个参数与下一个相同。链式,链条:
std::string -> int -> float -> std::string -> json.

我想要什么...我想要某种方法来制作这样的链条:

template <typename ...Args>
class holder {
using chain_type = trans_chain_create_t<Args...>;
};

holder<std::string, int, float, std::string, json> h;

是否可以?
我对可变参数模板不是很熟悉,并且很少使用它们。

最佳答案

是的,有可能:

template< typename F, typename S >
class trans {};

template< typename F, typename S, typename... Tail >
struct create_trans_chain;

template< typename F, typename S, typename... Tail >
using create_trans_chain_t = typename create_trans_chain< F, S, Tail... >::type;

template< typename F, typename S >
struct create_trans_chain< F, S >
{
using type = std::tuple< trans< F, S > >;
};

template< typename F, typename S, typename Next, typename... Tail >
struct create_trans_chain< F, S, Next, Tail... >
{
using type = decltype(std::tuple_cat(
std::declval< create_trans_chain_t< F, S > >(),
std::declval< create_trans_chain_t< S, Next, Tail... > >()));
};

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

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