0
2 질문 :
1. 회원을 통해/modify_key를 수정하려면 매개 변수를 전달해야합니까?
2. 왜 내가
multi_index 템플릿 컴파일 오류
이 오류가있는 전체 코드를 보려면이 컴파일 오류가 있습니까, 당신은 http://coliru.stacked-crooked.com/a/d6241361318e1925
볼 수있는 오류가
MultiIndex4.h: In member function 'uint32_t CrMultiParameterMultiIndex::ModifyKeyBy(SearchingKey&, ModifyKeyType&) [with SearchingTagType = IMEI_tag, ModifyingTagType = IMEI_tag, SearchingKey = uint32_t, ModifyKeyType = uint32_t]':
MultiIndex4.h:183: instantiated from here
MultiIndex4.h:119: error: no matching function for call to 'boost::multi_index::multi_index_container<UsersKey, UsersKey_indices, std::allocator<UsersKey> >::modify_key(boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<UsersKey, std::allocator<UsersKey> > > >&, boost::function<void()(uint32_t&)>&)'
*** Errors occurred during this build ***
내가 클래스 CrMultiParameterMultiIndex이입니다 2 개의 색인이있는 다중 색인을 보유하십시오.
키의 일부만 검색하고 키의 일부만 수정하는 템플릿 함수를 만들려고했습니다.
이 클래스는
template <typename SearchingTagType,typename ModifyingTagType,typename SearchingKey,typename ModifyKeyType> uint32_t ModifyKeyBy(SearchingKey & key,ModifyKeyType & pi_Modifykey)
{
uint32_t hRes = 1;
//search for entry by TagType
typedef typename GlobalHash::index<SearchingTagType>::type IndexType;
typename IndexType::iterator it = GetIteratorBy<SearchingTagType>(key);
//entry found
if(it != m_pGlobalHash->get<SearchingTagType>().end())
{
//Set parameter to modify
hRes = SetParameterKeys<ModifyingTagType>(pi_Modifykey);
if(hRes == 1)
{
//get iteraror to modify
typedef typename GlobalHash::index<ModifyingTagType>::type ModifyIndexType;
typename ModifyIndexType::iterator itToModify = m_pGlobalHash->get<ModifyingTagType>().iterator_to(*it);
boost::function<void(ModifyKeyType &)> f = boost::bind(&CrMultiParameterMultiIndex::ModifyKey<ModifyingTagType, ModifyKeyType >, this, _1);
//modify key failed
if(m_pGlobalHash->modify_key(itToModify , f)==false)
hRes = 0;
}
}
//entry not found
else
hRes = 0;
return hRes;
}
이
uint64_t nFromImsi = 1;
uint64_t nToImsi = 1;
m_multiParam.ModifyKeyBy<IMSI_tag,IMSI_tag>(nFromImsi,nToImsi)
하지만이
uint32_t nFromImsi = 1;
uint32_t nToImsi = 1;
m_multiParam.ModifyKeyBy<IMEI_tag,IMEI_tag>(nFromImsi,nToImsi)
컴파일 도우미 함수를 사용
template <typename TagType,typename SearchingKey>
typename GlobalHash::index<TagType>::type::iterator GetIteratorBy(SearchingKey & key){
return m_pGlobalHash->get<TagType>().find(key) ;
}
및 수정 기능이
왜? 그리고 여기
를 컴파일 할 수있는 방법 수식은
template <> inline void CrMultiParameterMultiIndex::ModifyKey<IMEI_tag>(uint32_t & po_Key){po_Key = m_ParameterKeys.IMEI;}
template <> inline void CrMultiParameterMultiIndex::ModifyKey<IMSI_tag>(uint64_t & po_Key){po_Key = m_ParameterKeys.IMSI;}
답을 보내 주셔서 감사합니다. 회원을 통해/modify_key를 수정하려면 매개 변수를 전달해야합니까? – davidbobo
[coliru] (http://coliru.stacked-crooked.com/a/4586d3c48d1b4a55) –
죄송합니다. "회원을 통해"매개 변수를 전달하는 것에 대해 궁금한 점이 있습니까? –