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)
您可以使用模板部分专业化来获取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)