gpt4 book ai didi

c++ - 为什么不支持从 template 到 template 的类特化

转载 作者:搜寻专家 更新时间:2023-10-31 00:09:58 27 4
gpt4 key购买 nike

我想知道为什么类特化来自 template<typename T1, typename T2>template<typename T1, int i>不支持。

例如:

template<typename T1, typename T2>
struct B{};

template<typename T1>
struct B<T1, T1>{}; //ok

template<typename T1>
struct B<T1, int>{}; //ok

template<typename T1,int i>
struct B<T1,i>{}; //error: expected a type, got 'i'

template<typename T1,constexpr int i>
struct B<T1,i>{}; //error: expected a type, got 'i'

最佳答案

您的主模板需要一个类型参数,但 i 不是类型,它是一个非类型参数。 int 是一种类型。

您可以使用 std::integral_constant 以某种方式绑定(bind)它们:

template<typename T1, int i>
struct B<T1, std::integral_constant<int, i>>{};

这并不完全相同,但是using 声明 可以帮助解决这个问题:

template<typename T1, int i>
using BT = struct B<T1, std::integral_constant<int, i>>;

关于c++ - 为什么不支持从 template<typename T1, typename T2> 到 template<typename T1, int i> 的类特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40620442/

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