代码之家  ›  专栏  ›  技术社区  ›  George Godik

boost::通过带参数的函数调用进行多索引

  •  0
  • George Godik  · 技术社区  · 17 年前

    我正在尝试制作一个boost::multi\u 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()具有相同的属性

    多索引声明类似于

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

    除了那个 BOOST\u MULTI\u INDEX\u CONST\u MEM\u FUNCT() 不具有这些功能。 复合键仍然使用成员变量。

    经过一番思考,以下是我要做的要点。

    多索引决定了它在编译时的索引特性。如何绕过这些特性并使用运行时确定的索引?

    1 回复  |  直到 17 年前
        1
  •  2
  •   Kirill V. Lyadvinsky    17 年前

    你想把什么作为参数传递给函数?是什么 const std::string & _attr

    不管怎样, BOOST_MULTI_INDEX_CONST_MEM_FUN 只是一个宏 const_mem_fun const_mem_fun1 康斯特·梅姆·冯 通过引用(或包装器,例如。 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); }
    };