2016-06-22 9 views
2
template<class Key, class Value> 
AVLTree<Key,Value>::AVLTree(){ 
    this->lessThan = Key::operator<; 
} 

このコードは、std::function<bool(Key, Key)> lessThanフィールドをキーの<演算子とデフォルトで同じにすると想定されています。C++で演算子にstd ::関数を割り当てるにはどうすればよいですか?

error: ‘operator<’ is not a member of ‘int’ 

が、私はこの間違ったのフォーマットAM、またはC++でこれだけのことは不可能である:私はAVLTree<int,int>でこれをしようとすると、しかし、私が取得しますか?

+2

あなたの仮定は、 '演算子は<'メンバ関数であるが、それはint' 'のために一般的なケースではなく、間違いない、'のstd :: less'を使用しています – vu1p3n0x

答えて

8

intで比較を実行するC++には既存の関数はありません。さらに、Keyがクラスタイプであっても、そのメンバーにメンバーまたは非メンバーがあるかどうかはわかりませんoperator<。 、あなたは標準ライブラリのコンテナのようなAVLTreeを設計する場合

this->lessThan = [](const Key& k1, const Key& k2){ return k1 < k2; }; 
    1. 使用std::less

      this->lessThan = std::less<Key>(); 
      
    2. ラムダを使用してください:ここでは

      は、いくつかの選択肢があります比較対象の型はaでなければなりませんテンプレートパラメータCompをデフォルトのstd::less<Key>とし、コンストラクタでインスタンスを渡します。デフォルトはComp()です。

  • 1

    あなたは、内蔵などintdoublechar、のようなタイプのそれはあなたのコードが失敗した、ビルトインタイプに関係演算子を照会することは不可能だのテンプレート特殊化を実装する必要があります。

    関連する問題