6

あなたが持っているとしましょう:

template<class T>
class A {
  template<class T1> 
  void foo(const T1& t1) {}

  //
  // Lots of other definitions (all templated)
  // 
};

そして、あなたは専門化したいのですがfoo(const T1&)、専門家のためだけですA<bool>。このような:

template<>
class A<bool> {
  template<class T1> 
  void foo(const T1& t1) {
    // Code for specialized A<boo>::foo
  }

  //
  // Repeating the former definitions, how to avoid this ??
  // 
};

しかし、これを機能させるには、クラステンプレートで定義されているすべてのコードを複製し、class Aそれをに再度含める必要がありclass A<bool>ます。

メンバーの専門分野のみを定義しようとしました。

template<>
void A<bool>::template<class T1> foo(const T1&) {}

これも機能しません:

template <class T1> void A<bool>::foo(const T1&) {}

しかし、コンパイラはそれを好きではありません。このコードの重複に対処する方法は何ですか?

4

2 に答える 2

7

構文?この回答を参照してください。試す:

template<>
template<typename T1>
void A<bool>::foo(const T1&){}

クラステンプレート全体をコピーする必要はありません。

于 2012-10-16T10:51:01.837 に答える
0

関数とクラステンプレートを提供してから、いくつかのtypedefを定義できます。

template<class T, class TArg> 
class A 
{   
    void foo(const TArg& arg) {}

    // Lots of other definitions (all templated)
};

typedef A<MyType, MyType> NormalClass;
typedef A<MyType, bool>   BoolClass;
于 2012-10-16T10:45:11.993 に答える