使用类模板进行部分专业化

时间:2014-05-08 19:37:47

标签: c++ templates

我正在阅读这里给出的答案: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

1 个答案:

答案 0 :(得分:1)

完全专业化是指模板参数全部被具体类型替换,模板参数列表为空。 MyClass<T>不具体;和

template<typename T> struct Foo<MyClass<T>> { ... };

它仍由T参数化,模板参数列表仍包含T。例如,

template<> struct Foo<MyClass<int>> { ... };

Foo的完全专精,比Foo<MyClass<T>>更专业。