从模板类的 std::tuple 中提取类型列表

Pat*_*ght 6 c++ templates stdtuple

假设我有以下课程

class Example {
public:
    using value_type = std::tuple<
        uint8_t,
        uint8_t,
        uint16_t
    >;

private:
    value_type _value;
};
Run Code Online (Sandbox Code Playgroud)

现在,我希望能够基于此类型创建另一个类,将每个类类型包装在另一种类型中。基于将每种类型包装在模板化类中的可变参数模板中,我知道我可以通过以下方式实现一半的目标:

template <typename T>
class Wrapper;

template <typename ... ARGS>
class ExampleWrapper {
private:
    std::tuple<Wrapper<ARGS>...> _args;
};
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚的是,ARGS如果我所知道的就是ExampleT在哪里,如何获取TExample。我希望能够使用ExampleWrapper如下:

ExampleWrapper<Example> myWrapper;
Run Code Online (Sandbox Code Playgroud)

康桓瑋*_*康桓瑋 8

您可以使用模板部分专业化来获取ARGS

template <typename T>
class Wrapper;

template <typename Tuple>
class ExampleWrapper;

template <typename ... ARGS>
class ExampleWrapper<std::tuple<ARGS...>> {
private:
    std::tuple<Wrapper<ARGS>...> _args;
};
Run Code Online (Sandbox Code Playgroud)

然后:

ExampleWrapper<Example::value_type> myWrapper;
Run Code Online (Sandbox Code Playgroud)