0

キーとしてパラメーターを持つメンバー関数を使用する boost::multi_index コンテナーを作成しようとしています。

class Data {
public:
   std::string get(const std::string & _attr) { return _internals_fetch_data(_attr); }

/*
   assume some implementation for storing data in some structure(s)
*/
};

これらのデータ項目の長方形のリストがあり、複数のインデックスが必要だとします。長方形は、リスト内のすべてのアイテムが get() を介して同じ属性を持つことを意味します

boost::multi_index 宣言は次のようなものです

typedef multi_index_container<
  Data,
  indexed_by<
   ordered_unique<
    BOOST_MULTI_INDEX_CONST_MEM_FUN(Data,String,get)
   >
  >
> my_container;

ただし、BOOST_MULTI_INDEX_CONST_MEM_FUNCT()にはこれらの機能がありません。複合キーは引き続きメンバー変数で機能します。

どうすればこれを回避できますか? orderd_unique<> に boost::function1 を与えることができるようには見えません

編集:

少し考えた後、ここに私がやろうとしていることの要点があります。

boost::multi_index は、コンパイル時にインデックス機能を決定します。これらの機能を回避し、実行時に決定されるインデックスを使用するにはどうすればよいですか?

4

1 に答える 1

2

関数の引数として何を渡すと思いますか? とはconst std::string & _attr?

とにかく、ファンクタBOOST_MULTI_INDEX_CONST_MEM_FUNの単なるマクロです。const_mem_fun独自の functor を作成できますconst_mem_fun1。しかし、私はあなたがそれをどのように使用するのか見当がつきません。参照によるオブジェクトの実装const_mem_fun(またはラッパーなど) を受け取り、shared_ptr引数なしでメンバー関数を呼び出します。

boost::multi_index::indexed_byオブジェクトではなく、タイプをordered_unique期待するだけでなく、タイプを期待します。だから書けないconst_mem_fun1<Data, std::string, &Data::get>("string")getパラメータなしで関数を使用して、構造体に特別な文字列フィールドを作成できないのはなぜDataですか?

struct Data {
  std::string _attr;
public:
  std::string get() const { return _internals_fetch_data(_attr); }
};
于 2009-09-02T18:30:05.563 に答える