假设我有以下课程
class Example {
public:
using value_type = std::tuple<
uint8_t,
uint8_t,
uint16_t
>;
private:
value_type _value;
};现在,我希望能够基于这个类型创建另一个类,它封装了另一个类型中的每个类类型。基于将每种类型包装在模板类中的可变模板中。,我知道我可以通过以下方式实现我一半的目标:
template <typename T>
class Wrapper;
template <typename ... ARGS>
class ExampleWrapper {
private:
std::tuple<Wrapper<ARGS>...> _args;
};但是,如果我只知道T ( T就是其中的例子),那么我想不出如何获得T。我希望能够按以下方式使用ExampleWrapper:
ExampleWrapper<Example> myWrapper;发布于 2022-02-04 17:17:13
可以使用模板部分专门化来获取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;
};然后:
ExampleWrapper<Example::value_type> myWrapper;发布于 2022-02-04 18:10:02
创建一个静态函数来返回所需的类型并在其上使用decltype。
template <typename T>
class Wrapper{};
template<class T>
class ExampleWrapper {
public:
template<typename ...Args>
static std::tuple<Wrapper<Args>...> fnc(std::tuple<Args...>);
using value_type = decltype( fnc( std::declval<typename T::value_type>() ) );
private:
value_type _args;
};
// The type of `ExampleWrapper<Example>::_args` would be
// std::tuple<Wrapper<unsigned char>, Wrapper<unsigned char>, Wrapper<short unsigned int> >
}不需要将静态函数声明和value_type别名公开。我让他们public只是为了演示。
https://stackoverflow.com/questions/70990248
复制相似问题