我知道下面的代码是类的部分特化:
template <typename T1, typename T2>
class MyClass {
…
};
// partial specialization: both template parameters have same type
template <typename T>
class MyClass<T,T> {
…
};
Run Code Online (Sandbox Code Playgroud)
另外我知道C++不允许函数模板部分特化(只允许完整).但是我的代码是否意味着我对一个/同一类型的参数有部分专业的函数模板?因为它适用于Microsoft Visual Studio 2010 Express!如果不是,那么请您解释部分专业化概念吗?
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
template <typename T1, typename T2>
inline T1 max (T1 const& a, T2 const& b)
{
return a < b ? b : a;
}
template <typename T>
inline T const& max (T const& a, T const& b)
{
return …Run Code Online (Sandbox Code Playgroud) c++ templates partial-specialization template-specialization
我遇到了一个有趣的观点,我无法解释或找到解释.考虑以下模板定义(使用mingw g ++ 4.6.2编译):
template <typename T, typename S>
class Foo
{
public:
void f(){}
void g(){}
};
Run Code Online (Sandbox Code Playgroud)
如果我们想要,我们可以完全专注于任何单一成员函数:
template <>
void Foo<char,int>::f() {}
Run Code Online (Sandbox Code Playgroud)
但部分特化失败,"无效使用不完整类型'类Foo <...>'"错误:
template <typename T, typename S>
void Foo<T,S*>::f()
{
}
template <typename T>
void Foo<T,int>::f()
{
}
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚原因.这是一个有意识的设计决策,以避免一些我无法预见的问题?这是疏忽吗?
提前致谢.