2

私が持っているとしましょう:

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

どんな助けでも大歓迎です!

フフ。

4

1 に答える 1

2

余分なものを削除するtemplate<>と、機能します。

于 2012-12-20T10:53:23.773 に答える