2017-03-29 6 views
0

次のコードを検討してください。継承されたクラスを非型テンプレートでC++の親参照に渡す方法

template<class T> 
class collection 
{ 
public: 
    std::vector<T> vec; 
    void sort(sortType& U, bool compare(T, T)) 
    { 
     U.doSort(vec, compare) ; 
    } 
} 

そして、これはクラスSORTTYPE

template<class T> 
class sortType 
{ 
protected: 
    doSort(std::vector<T>&, bool compare(T, T)); 
} 

次のコードで、私は

template<class T> 
class insertionsort : public sortType 
{ 
public: 
    doSort(std::vector<T>&, bool compare(T, T)) 
    { 
     //code of insertion sort 
    } 
} 

template<class T> 
class quicksort : public sortType 
{ 
public: 
    doSort(std::vector<T>&, bool compare(T, T)) 
    { 
     //code of quicksort 
    } 
} 

比較を使用する場合、いくつかの異なるソート方法が、このような関数を見ているされています

template <class T> 
bool greater(T l, T r) 
{ 
    if (l<r) return true; 
    return false; 
} 

私はこのような以前のクラスを使用します:

insertionsort U = insertionsort() ; 
collectionObj.sort(U, greater) ; 

残念ながら、Visual Studioは、私がSORTTYPEクラスに挿入ソートクラスを渡すことはできませんことを発表しました。どうすれば修正でき、以前のようなものを使うことができますか? helpingsここ

+0

'greater'は戻り値の型が' bool'ですが、 'T'型の式を返しますか? – aschepler

+0

2つの要素を入れ替えようとするかどうかの比較条件はこれ以上ありません –

+0

'insertionsort'はクラスではありません。それはテンプレートです。 'insertionsort U = insertionsort()'は意味がありません。 'insertionsort 'が必要です。 'sortType'と同じです。同上。 'doSort'はバーチャルになります。 –

答えて

0

ため ありがとう:

void sort(sortType& U, bool compare(T, T)) 

あなたがsortTypeに合格しようとしているが、それはテンプレートです。関数シグネチャも

void sort(sortType<T>& U, bool compare(T, T)) 

なければならないので、実際の型は何N.M.、sortType<T>ありますコメントに記載されています

関連する問題