为什么从模板<typename t1,=“”typename =“”t2 =“”>到模板<typename t1,=“”int =“”i =“”>不支持类专门化

时间:2016-11-15 21:56:46

标签: c++ templates

我想知道为什么不支持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'

1 个答案:

答案 0 :(得分:6)

您的主模板需要一个类型参数,但$ cd /tmp $ wget scapy.net $ unzip scapy-latest.zip $ cd scapy-2.* $ sudo python setup.py install 不是类型,它是非类型参数。 i是一种类型。

您可以使用int以某种方式绑定它们:

std::integral_constant

这不完全相同,但使用声明可以帮助解决它:

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