2

テンプレート化されたコンテナー クラス MyCont を作成しました。

#include <iostream>
template <class T>
class MyCont
{
    public:
        void SomeFunc();
        T* list;
};

template <class T>
void MyCont<T>::SomeFunc()
{
    std::cout<<"in function"<<std::endl;
    //...
}


int main()
{
    MyCont<int> y;
    y.SomeFunc();
    MyCont< MyCont<int> > x;
    x.SomeFunc();
}

これはうまくいきます。ただし、型として MyCont を持つ MyCont の場合、SomeFunc() の動作を変更できるようにしたいと考えています。これを行う方法がわかりません(または可能かどうかもわかりません)。これを SomeFunc() の最初の定義の下に追加しようとしました:

template <>
void MyCont< MyCont<class T> >::SomeFunc()
{
    std::cout<<"in altered function"<<std::endl;
    //...
}

これはコンパイルされますが、呼び出されるのは常に最初の SomeFunc です

ありがとう

4

2 に答える 2

-1

コンパイラが型ごとに個別のコードを生成できるようにするには、テンプレートを完全な型のみで部分的に特殊化する必要があります。

#include <iostream>
template <class T>
class MyCont
{
    public:
        void SomeFunc();
        T* list;
};

template <class T>
void MyCont<T>::SomeFunc()
{
    std::cout<<"in function"<<std::endl;
    //...
}

template <>
void MyCont< int >::SomeFunc()
{
    std::cout<<"in altered function"<<std::endl;
    //...
}

int main()
{
    MyCont<int> y;
    y.SomeFunc();
    MyCont< MyCont<int> > x;
    x.SomeFunc();
}
于 2013-10-05T15:48:57.660 に答える