我正在阅读这里给出的答案:https://stackoverflow.com/a/23550519/1938163
我想知道为什么最后一行是模板结构部分专业化
template<typename T> MyClass { public: };
template <typename T> struct Foo {void foo() {}};
template<> struct Foo<int> {void foo() { std::cout << "fooint";} };
// Why is this a partial specialization?
template<typename T> struct Foo< MyClass<T> > {void foo() {std::cout << "foo myclass";} };
我认为部分专业化包括完全替换参数参数,如下面的
template <typename T, typename G> struct FooBar {};
template <typename G> struct FooBar<int, G>{}; // Partial specialization
答案 0 :(得分:1)
完全专业化是指模板参数全部被具体类型替换,模板参数列表为空。 MyClass<T>
不具体;和
template<typename T> struct Foo<MyClass<T>> { ... };
它仍由T
参数化,模板参数列表仍包含T
。例如,
template<> struct Foo<MyClass<int>> { ... };
是Foo
的完全专精,比Foo<MyClass<T>>
更专业。