gpt4 book ai didi

c++ - 有没有办法将一对元组剥离为可变参数模板类型或使用可变参数类型实例化某些内容?

转载 作者:行者123 更新时间:2023-12-01 13:44:34 24 4
gpt4 key购买 nike

我有一个 tuplepair s 其中每一对都有一个固定类型和一个变体类型。我想要的是一个变体类型列表或用这些类型定义一个对象(它肯定是用可变参数模板包构造的)。

根据 How do I strip a tuple<> back into a variadic template list of types? ,可以用 tuple 的构成类型实例化某些东西.但在这种情况下,我不知道这是否可能,如果可能,我不知道该怎么做。

想象一下我有这样的事情:

struct MyFixedType
{ /* ... */ };


using Tuple = std::tuple<
std::pair<MyFixedType, int>,
std::pair<MyFixedType, double>,
std::pair<MyFixedType, std::string>
>;

我有这门课:
template <typename... Ts>
class MyClass
{
};

我想要的是声明一个 MyClass 的对象与 <int, double, std::string>
注意:虽然这种情况可以使用预处理器或一些宏来处理,但我不允许使用宏。

最佳答案

为简洁起见,使用函数模板参数推导:

template <class Fixed, class... Variant>
MyClass<Variant...> MyClassFromPairTuple_impl(std::tuple<std::pair<Fixed, Variant>...> &&);

template <class Tuple>
using MyClassFromPairTuple = decltype(MyClassFromPairTuple_impl(std::declval<Tuple>()));

用法:
using Tuple = std::tuple<std::pair<MyFixedType, int>, std::pair<MyFixedType, double>, std::pair<MyFixedType, std::string>>;

MyClassFromPairTuple<Tuple> instance; // MyClass<int, double, std::string>

Live demo

关于c++ - 有没有办法将一对元组剥离为可变参数模板类型或使用可变参数类型实例化某些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57782366/

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