gpt4 book ai didi

c++ - 更高类型的别名模板

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:04 26 4
gpt4 key购买 nike

让我们调用一个看起来像 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>>>();

关于c++ - 更高类型的别名模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37904170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com