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 に答える