0

寻找这种模板特化的正式名称和链接类型,我们特化一个模板只是为了特化类模板中单个方法的实现。

template <class T>
class Foo
{
public:
    void f() 
    {
        // default method implementation
    }
};

// What is the default linkage of this function (I'm guessing 
// external based on basic function template specializations), 
// and what am I doing called? (method specialization of a class 
// template?)
template <> 
void Foo<int>::f()
{
     // method implementation for Foo<int>
}
4

1 回答 1

2
Foo<int> f1; f1.f(); //Use implementation for Foo<int>, i.e. the specialized one.
Foo<double> f2; f2.f(); //Use the default implementation.

这种情况背后的术语称为显式专业化。编译器将选择它可以找到的“最佳”匹配模板。确定“最佳”匹配模板的过程有点复杂。有关详细信息,您可以参考《C++ 模板:完整指南》一书。

于 2012-12-16T02:20:49.760 回答