选件类模板实例化

不同于函数模板,因此,在实例化类模板,必须通过向类模板的参数显式实例化类时。 创建 TempClass实例:

TempClass< float, 6 > test1;       // OK
TempClass< char, items++ > test2;  // Error, second parameter 
                                   // must be constant.

,而该类或函数实例化时,编译器生成模板类或函数的代码。 成员函数实例化,在调用方法时,因此,虚拟成员函数实例化,其类构造时。 ,如果构造具有模板的库其他用户的,这可能会引起问题。 有关更多信息,请参见 显式实例化

类模板由编译器先专用然后实例化。 编译器在类无法实例化类模板,直到对此模板类的成员的引用进行, sizeof 使用,或创建实例。

模板的显式专用化是模板的自定义版本特定类型的。

// template_instantiation2.cpp
template<class T> class X
{
};

// Explicit specialization of X with 'int'
template<> class X<int>
{
};
int main()
{
}

不 template<> 的显式专用化将导致错误。 Visual C++ 的版本在 Visual C++ .NET 2003 之前的接受此语法:

// Explicit specialization of X with 'char'
class X<char> // C2906
{
};

如果模板显式实例化或一个专用的,它无法显式实例化还没有专用第二个相同的同一个程序设置模板参数。 不同的模板参数的进一步专用化允许的。

如果没有显式实例化或专用化特定模板参数的,模板将隐式实例化先使用它的点。

由于同一模板的不同实例化是不同的类型,一个与模板专用化还是实例化的静态成员与同一模板的不同专用化还是实例化的静态成员。

请参见

参考

选件类模板