2016-12-22 4 views
1

私は、そのように定義リンクリストのクラスを持っているC++型チェックテンプレート

template <typename Bin> 
    class LinkedList { 
    ... 
    struct node{ 
     Bin value; 
     ... 
    }; 
... 
}; 

、そこに私は2つのリストが等しいかどうかを確認するために==演算子をオーバーライドしたいを使用しました。私はそれが設定され、タイプが同じである場合のために働いている。例えば

でも問題はありませんが、異なるタイプの比較がある場合はコンパイラエラーが発生します。不一致の型が比較されないと仮定するだけで、これ以外の回避策はありますか?

+0

異なるタイプのリストを比較できるようにしたいとお考えですか? – Brian

+1

@Brian:例えば、 'LinkedList 'と 'LinkedList 'を比較すると意味があるようです。 – celtschk

答えて

2
#include <type_traits> 

template<class T> 
    struct List 
    { 

    }; 

template<class L, class R> 
    auto operator==(const List<L>& l, const List<R>& r) 
    -> decltype(std::declval<L>() == std::declval<R>()) 
{ 
    bool same = true; 
    // run through l and r comparing elements 
    // this function will only expand if there is a valid comparison 
    // between an L and an R 

    return same; 
} 


int main() 
{ 
    List<int> x; 
    List<double> y; 

    auto same = x == y; 
}