带有boost multi_index的索引

时间:2016-10-18 18:04:08

标签: boost multi-index boost-multi-index

如何使用类的成员函数(存储在multi_index中)索引boost :: multi_index容器,该函数返回另一个类的常量引用?

我得到的错误是:

error C2440: 'specialization' : cannot convert from 'overloaded-function' to 'RetClass (__thiscall StoreMe::* )(void) const'

EDIT1:

这是我创建的完全可验证的类似代码,它具有相同的错误,

#include "stdafx.h"
#include<multi_index_container.hpp>
#include<boost/multi_index/hashed_index.hpp>
#include<boost/multi_index/mem_fun.hpp>


class RetClass
{
    int a, b;

};

class StoreMe
 {
    RetClass ex;
public:
    void setId(RetClass a) {
        ex = a;
    };


    virtual const RetClass& getId() const { return ex; }

};

typedef boost::multi_index_container<
    StoreMe,
    boost::multi_index::indexed_by<
        boost::multi_index::hashed_non_unique<boost::multi_index::const_mem_fun<StoreMe,     RetClass, &StoreMe::getId> >
    >
> mi_storeMe;

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

TIA

-R

1 个答案:

答案 0 :(得分:2)

使用boost::multi_index::const_mem_fun

在OP的其他信息之后编辑:const_mem_fun中指定的返回类型必须与您要用于索引的函数完全相同。请注意您当前代码的不同之处:

virtual const RetClass& getId() const;
const_mem_fun<StoreMe, RetClass, &StoreMe::getId>

因此,请按以下方式更改const_mem_fun部分:

const_mem_fun<StoreMe, const RetClass&, &StoreMe::getId>