C ++:我正在做什么的名称和链接?

时间:2012-12-16 01:06:36

标签: c++ templates linkage

寻找这种模板专业化的官方名称和链接类型,我们专门设计一个模板,专门用于在类模板中实现单个方法。

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>
}

1 个答案:

答案 0 :(得分: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.

本案例背后的术语称为Explicit Specialization。编译器将选择它可以找到的“最佳”匹配模板。确定“最佳”匹配模板的过程有点复杂。有关更多详细信息,请参阅“C ++模板:完整指南”一书。