2

私はクラスを持っています:

template<typename T>
class Foo
{
public:
    ...
    Foo& operator=(const Foo&) { ... }
};

Foo<std::string>そして、オーバーロードを追加しFoo<std::string>::operator=(const char*)、残りのFoo<T>実装を再利用することに特化したいと思います。Foo<std::string>特殊化が特殊化されていない実装を活用することは可能ですか、または実装を、特殊化が派生するFoo<T>別の基本クラスに移動する必要がありますか?Foo<T>Foo<std::string>

4

1 に答える 1

2

テンプレートの複数の特殊化は、関連のない型です。質問で述べたように、一般的なアプローチは、ほとんどの機能を基本クラスに移動して再利用することです。

C++1x には、新しい構文を使用して意図を表現するよりクリーンな方法を可能にする 2 つの提案がありますがstatic if、どちらの提案も受け入れられる前に解決しなければならない問題がいくつかあり、標準化を待つ必要があります。承認されてから、コンパイラが追いつく必要があります...それでも、提案された構文は明示的な特殊化を使用せず、一般的なテンプレートを調整します。

template<typename T>
class Foo
{
public:
    ...
    Foo& operator=(const Foo&) { ... }
    static if (std::is_same<T,std::string>::value) {
       Foo& operator=(const char*) { ... }
    }
};
于 2012-09-07T01:37:58.600 に答える