如何将元函数应用于variadic模板类的模板类型
How to apply a meta function to the template types of a variadic template class?
假设我有许多原子结构,每个结构都有inner_type
:
struct Atomic1{
using inner_type = int;
};
struct Atomic2{
using inner_type = double;
};
struct Atomic3{
using inner_type = bool;
};
...
我的客户端类是一个可以使用上述1个或更多原子类的变异模板:
template<class ...AtomicTypeArgPack>
class MyclassAcceptingAtomicTypes;
我有一个相关的通用类,该类接受Atomic*::inner_type
作为模板参数:
template<class ...InnerTypeArgPack>
class MyclassAcceptingInnerTypes;
定义了我的特定API类,但指定了几个模板类型:
using my_first_class_t = MyclassAcceptingAtomicTypes<Atomic1, Atomic2>;
对于每个特定类,我也有另一种类型的内部类型:
using my_first_class_inner_types_t = MyclassAcceptingInnerTypes<Atomic1::inner_type , Atomic2::inner_type >;
是否可以使用模板meta编程/meta函数自动从第一个声明(my_first_class_t
)中自动生成第二种类型(即my_first_class_inner_types_t
)?
尝试以下:
template <class Atomics>
struct inner_types;
template <template <class...> class T, class... Atomic>
struct inner_types<T<Atomic...>>
{
using type = MyclassAcceptingInnerTypes<typename Atomic::inner_type...>;
};
using atomics = MyclassAcceptingAtomicTypes<Atomic1, Atomic2>;
using inners = MyclassAcceptingInnerTypes<Atomic1::inner_type , Atomic2::inner_type >;
static_assert(std::is_same_v<inner_types<atomics>::type, inners>);
是否可以使用模板meta编程/元函数自动从第一个声明(
my_first_class_t
)自动生成第二种类型(即my_first_class_inner_types_t
)?
您的意思是如下吗?
template <typename ... Ts>
constexpr auto foo (MyclassAcceptingAtomicTypes<Ts...> const &)
-> MyclassAcceptingInnerTypes<typename Ts::inner_type...>;
template <typename T>
using bar = decltype(foo(std::declval<T>()));
您可以验证
static_assert( std::is_same<bar<my_first_class_t>,
my_first_class_inner_types_t>{}, "!" );
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- std::绑定variadic模板和自动返回类型
- 类型检测:使用variadic参数正确实现计算平均值的函数
- 模板模板参数,具有混合类型和非类型variadic参数
- variadic函数模板的参数被作为模板非类型传递
- 采用数组类型的variadic函数
- 类型和标量常数的variadic模板
- 使用variadic模板进行函数调用的模板类型扣除
- 用类型的递归继承获得Variadic模板的阴影成员
- Variadic模板参数包只接受无符号int或size_t作为其类型
- 动态值的Variadic Template类型
- 如何将元函数应用于variadic模板类的模板类型
- 包括variadic模板中相同类型的数组
- variadic模板递归返回类型扣除汇编误差
- 如何使variadic模板类方法以函数指针为参数,类型派生自函数模板
- Variadic如何创建存储传递参数的类型
- getter 到 variadic 容器 - get<0>() 只处理具体类型?