了解 Class 模板专业化示例的隐式实例化
Understanding an Implicit Instantiation of Class Template Specialization Example
所以标准的this section给出了这个例子(我的问题是内联的):
template<class T, class U>
struct Outer {
template<class X, class Y> struct Inner; // Where are X and Y from? Is this defining a struct?
template<class Y> struct Inner<T, Y>; // Is this defining a struct specialization? If so what is Y?
template<class Y> struct Inner<T, Y> { }; // I feel like this is a redefinition of the line above, could it ever not be?
template<class Y> struct Inner<U, Y> { };
};
诚然,我无法理解标准的链接部分,因为我无法理解这里发生的事情。我想我只是对所有飞来飞去的 template
感到困惑,但如果有人可以逐行告诉我发生了什么,那将非常有帮助。
template<class X, class Y> struct Inner;
// Where are X and Y from? Is this defining a struct?
这是模板结构的声明Inner
,X
和Y
是模板参数。
template<class Y> struct Inner<T, Y>;
// Is this defining a struct specialization? If so what is Y?
这是偏特化的声明,Y
是模板参数。
template<class Y> struct Inner<T, Y> { };
// I feel like this is a redefinition of the line above, could it ever not be?
这是偏特化的定义,这里不重定义。
然后将它们用作:
Outer<foo1, foo2>::Inner<foo3, foo4>* i1;
// the primary template is used, with T=foo1, U=foo2, X=foo3, Y=foo4
// btw the primary template is not defined in this example
Outer<foo1, foo2>::Inner<foo1, foo3> i2;
// the 1st partial specialization is used, with T=foo1, U=foo2, Y=foo3
Outer<foo1, foo2>::Inner<foo2, foo3> i3;
// the 2st partial specialization is used, with T=foo1, U=foo2, Y=foo3
给你:
template<class T, class U>
struct Outer {
// Forward-declares a struct with two template parameters
template<class X, class Y> struct Inner;
// Forward-declares a partial specialization of Inner
// (Y is its only template parameter)
template<class Y> struct Inner<T, Y>;
// Defines the forward-declared partial specialization
template<class Y> struct Inner<T, Y> { };
// Declares and defines another partial specialization
// (Y is its only template parameter)
template<class Y> struct Inner<U, Y> { };
};
所以标准的this section给出了这个例子(我的问题是内联的):
template<class T, class U>
struct Outer {
template<class X, class Y> struct Inner; // Where are X and Y from? Is this defining a struct?
template<class Y> struct Inner<T, Y>; // Is this defining a struct specialization? If so what is Y?
template<class Y> struct Inner<T, Y> { }; // I feel like this is a redefinition of the line above, could it ever not be?
template<class Y> struct Inner<U, Y> { };
};
诚然,我无法理解标准的链接部分,因为我无法理解这里发生的事情。我想我只是对所有飞来飞去的 template
感到困惑,但如果有人可以逐行告诉我发生了什么,那将非常有帮助。
template<class X, class Y> struct Inner; // Where are X and Y from? Is this defining a struct?
这是模板结构的声明Inner
,X
和Y
是模板参数。
template<class Y> struct Inner<T, Y>; // Is this defining a struct specialization? If so what is Y?
这是偏特化的声明,Y
是模板参数。
template<class Y> struct Inner<T, Y> { }; // I feel like this is a redefinition of the line above, could it ever not be?
这是偏特化的定义,这里不重定义。
然后将它们用作:
Outer<foo1, foo2>::Inner<foo3, foo4>* i1;
// the primary template is used, with T=foo1, U=foo2, X=foo3, Y=foo4
// btw the primary template is not defined in this example
Outer<foo1, foo2>::Inner<foo1, foo3> i2;
// the 1st partial specialization is used, with T=foo1, U=foo2, Y=foo3
Outer<foo1, foo2>::Inner<foo2, foo3> i3;
// the 2st partial specialization is used, with T=foo1, U=foo2, Y=foo3
给你:
template<class T, class U>
struct Outer {
// Forward-declares a struct with two template parameters
template<class X, class Y> struct Inner;
// Forward-declares a partial specialization of Inner
// (Y is its only template parameter)
template<class Y> struct Inner<T, Y>;
// Defines the forward-declared partial specialization
template<class Y> struct Inner<T, Y> { };
// Declares and defines another partial specialization
// (Y is its only template parameter)
template<class Y> struct Inner<U, Y> { };
};