私が持っているとしましょう:
template < typename T >
class ClassA
{
void doTheStuff (T const * t);
};
template < typename T >
class ClassB
{
// Some stuff...
};
次のように、ClassB テンプレートのすべてのインスタンスに対して doTheStuff メソッドを特化したいと思います。
template <typename T>
void ClassA< ClassB< T > >::doTheStuff (ClassB< T > const * t)
{
// Stuff done in the same way for all ClassB< T > classes
}
しかしもちろん、これはうまくいきません。残念ながら、どうすればそれができるのかわかりません。
Visual Studio のコンパイラを使用すると、次のようになります。
error C2244: 'ClassA<T>::doTheStuff' : unable to match function definition to an existing declaration
see declaration of 'ClassA<T>::doTheStuff'
definition
'void ClassA<ClassB<T>>::doTheStuff(const ClassB<T> *)'
existing declarations
'void ClassA<T>::doTheStuff(const T *)'
この投稿を見つけました:テンプレート引数がテンプレートであるテンプレート化されたクラスの特殊化
したがって、アドバイスに従って完全なクラスの特殊化を試みましたが、どちらも機能しません。
template <>
template < typename U >
class ClassA< ClassB< U > >
{
public:
void doTheStuff (ClassB< U > const * b)
{
// Stuff done in the same way for all ClassB< T > classes
}
};
ビジュアルは次のように述べています。
error C2910: 'ClassA<ClassB<U>>' : cannot be explicitly specialized
どんな助けでも大歓迎です!
フフ。