C++ 模板参数具体化的类型的模板专门化
首先,我很抱歉这个问题的标题,但它很难描述。 如果我想为C++ 模板参数具体化的类型的模板专门化,c++,language-lawyer,C++,Language Lawyer,首先,我很抱歉这个问题的标题,但它很难描述。 如果我想为A的所有实例化专门化Resolve,下面哪两个是有效的语法 (一) 模板结构A{}; 模板结构解析; 样板 结构解析和。 如果可能的话,请提供标准的报价 选项2)不在MSVC上编译,但至少在某些GCC版本上编译。这是正确的: template <uint32_t I> struct Resolve<A<I>> { }; 模板 结构解析和。但我们正在尝试进行部分专业化。部分专门化仍然需要引入模板参数,而显
A
的所有实例化专门化Resolve
,下面哪两个是有效的语法
(一)
模板结构A{};
模板结构解析;
样板
结构解析和。
如果可能的话,请提供标准的报价
选项2)不在MSVC上编译,但至少在某些GCC版本上编译。这是正确的:
template <uint32_t I>
struct Resolve<A<I>>
{ };
模板
结构解析和。但我们正在尝试进行部分专业化。部分专门化仍然需要引入模板参数,而显式专门化则不需要
另一方面,如果我们试图专门化显式专门化的成员,那么我们将使用模板。例如:
template <class T>
struct A {
template <class T2> struct B { }; // #1
};
template <> // for A
template <class T2> // for B
struct A<int>::B<T2> { }; // #2
A<char>::B<int> x; // #1
A<int>::B<char> y; // #2
模板
结构A{
模板结构B{};//#1
};
模板//用于
模板//用于B
结构A::B{};//#2.
A::bx;//#1.
A::B y;//#2.
第二篇文章的公认答案明确指出,模板
位无效。但不幸的是,没有说明我不确定你在找什么。如果标准中没有任何东西表明它是有效的,那么它就是无效的。好吧,也许标准在某种程度上说了这种情况。如果没有,那么我会同意第一个答案是无效的
template <uint32_t I>
struct Resolve<A<I>>
{ };
template <class T>
struct A {
template <class T2> struct B { }; // #1
};
template <> // for A
template <class T2> // for B
struct A<int>::B<T2> { }; // #2
A<char>::B<int> x; // #1
A<int>::B<char> y; // #2