更高态类型的别名模板
Alias template for higher-kinded types
让我们调用看起来像 T<Us...>
的类型是更高的类型。对于某些较高的类型SomeType
(假设它是std::vector<int>
),我想使用类型特征从中提取T
零件(std::vector
)。我可以做类似的事情:
template<typename>
struct HKT;
template<template <typename...> class T, typename... Us>
struct HKT<T<Us...>> {
template<typename... Vs>
using type = T<Vs...>;
};
所以现在我可以做HKT<SomeType>::type<Foo>
来定义std::vector<Foo>
。
,但是我试图摆脱::type
部分,就像typename std::enable_if<T>::type
可以缩写为std::enable_if_t<T>
一样。不知道是否可能,因为在我的情况下,HKT_t<SomeType>
(假设存在)将是一个别名模板,而不是类型。用法将像HKT_t<SomeType><Foo>
一样...我想这确实是一个"别名模板"。
我要这样做的原因是将其用作模板模板参数的参数。例如,
template<template <typename...> class T>
void foo() {...}
foo<HKT_t<std::vector<int>>>();
可能吗?
正如克里斯提到的,您最好的选择是创建包装功能以调用您的foo:
template <class T>
void wrapper_foo() {
foo<T::template type>();
}
//to call foo
wrapper_foo<HKT<std::vector<int>>>();
或使用模板参数的默认值:
template<class T, template <class...> class TT = T::template type>
void foo() {
TT<float> t;
}
现在您可以简单地致电:
foo<HKT<std::vector<int>>>();
相关文章:
- 具有瞬态资源的RAII类
- 多态性和功能结合
- 具有默认模板参数的多态类的模板推导失败
- 部分定义/别名模板模板参数
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 多态二进制函数
- 如何在C++20中创建模板别名的推导指南
- 访问存储在向量C++中的结构的多态成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 告诉c++编译器该参数没有别名
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 将 std::allocate_shared 与多态资源分配器一起使用
- C++高阶模板
- 通过switch和static_cast访问多态对象的运行时类型
- C++boost序列化多态性问题
- 如何在QT中制作模态QProgressDialog?
- 有没有优雅的方法可以在多态 lambda 中编写类型别名
- 更高态类型的别名模板
- C++中多变量正态/高斯分布的样本