4

クラスの1つのインデックスに対してのみテンプレートの特殊化を実行したいと思います。たとえば、次のコードでは、2番目のクラスが何であるかに関係なく、最初のクラスがintである場合は常に、特殊化を作成します。これを実装する方法はありますか?

template <class K, class V>
class myclass {
    public:
        void myfunc(K,V);
};

template <class K, class V>
myclass<K,V>::myfunc(K key, V value) {
...
}

template< ,class V>
myclass<int,V>::myfunc(int key, V value) {
...
}
4

2 に答える 2

5

可能ですが、単一のメソッド「myfunc」だけでなく、クラス「myclass」全体を特殊化する必要があります。次に例を示します。

#include <iostream>

template <typename K, typename V>
class myclass {
    public:
        void myfunc(K key, V value)
        {
            std::cout << "non-specialized " << key << "->" << value << std::endl;
        }
};


template<typename V>
class myclass<int, V> {
    public:
        void myfunc(int key, V value)
        {
            std::cout << "specialized " << key << "->" << value << std::endl;
        }
};

int main(int argc, char* argv[])
{
    myclass<int, char> instance;
    instance.myfunc(10, 'a');

    myclass<long, char> instance2;
    instance2.myfunc(10L, 'a');

    return 0;
}
于 2011-09-13T03:49:37.140 に答える
0

それは可能ですが、myclassを<int 、?に特化する必要があります。>ケース。これは、両方の場合ですべての定義を繰り返すことを意味します。必要なものによっては、コードの重複を避けるために、継承などを使用して回避できる場合があります。あなたが何を意図しているのかについての詳細はありませんが、答えは次のとおりです。

template< class K, class V > class myclass { general definition };
template< class V > class myclass< int, V >{ general definition };

より具体的な詳細でより良い答えが得られるかもしれません。テンプレートの世界には多くの機会があります。

于 2011-09-13T03:36:08.727 に答える