공유 메모리에 저장된 boost :: interprocess :: map에 일부 값을 삽입하려고합니다.boost :: interprocess :: map insert includes : 오버로드 된 함수에 모호한 호출
문제는 내가 컴파일하려고 할 때 "과부하 된 함수에 대한 모호한 호출"을 주며 왜 그런지 모르겠습니다. 여기에 몇 가지 코드 조각은 다음과 같습니다
vcrtdserverimpl.cpp(445) : error C2668: 'boost::interprocess_container::map<Key,T,Pred,Alloc>::insert' : ambiguous call to overloaded function
with
[
Key=VCRTDServer::KeyType,
T=VCRTDServer::ValueType,
Pred=std::less<VCRTDServer::KeyType>,
Alloc=VCRTDServer::ShmemAllocator
]
p:\lib\boost_1_39_0\boost\interprocess\containers\container\map.hpp(407): could be 'std::pair<_Ty1,_Ty2> boost::interprocess_container::map<Key,T,Pred,Alloc>::insert(const std::pair<char *,long> &)'
with
[
_Ty1=boost::interprocess_container::containers_detail::rbtree<VCRTDServer::KeyType ,std::pair<const VCRTDServer::KeyType ,VCRTDServer::ValueType>,boost::interprocess_container::containers_detail::select1st<std::pair<const VCRTDServer::KeyType ,VCRTDServer::ValueType>>,std::less<VCRTDServer::KeyType>,VCRTDServer::ShmemAllocator>::iterator,
_Ty2=bool,
Key=VCRTDServer::KeyType,
T=VCRTDServer::ValueType,
Pred=std::less<VCRTDServer::KeyType>,
Alloc=VCRTDServer::ShmemAllocator
]
p:\lib\boost_1_39_0\boost\interprocess\containers\container\map.hpp(396): or 'std::pair<_Ty1,_Ty2> boost::interprocess_container::map<Key,T,Pred,Alloc>::insert(const std::pair<const Key,T> &)'
with
[
_Ty1=boost::interprocess_container::containers_detail::rbtree<VCRTDServer::KeyType ,std::pair<const VCRTDServer::KeyType ,VCRTDServer::ValueType>,boost::interprocess_container::containers_detail::select1st<std::pair<const VCRTDServer::KeyType ,VCRTDServer::ValueType>>,std::less<VCRTDServer::KeyType>,VCRTDServer::ShmemAllocator>::iterator,
_Ty2=bool,
Key=VCRTDServer::KeyType,
T=VCRTDServer::ValueType,
Pred=std::less<VCRTDServer::KeyType>,
Alloc=VCRTDServer::ShmemAllocator
]
while trying to match the argument list '(std::pair<_Ty1,_Ty2>)'
with
[
_Ty1=char *,
_Ty2=int
]
이
사람이 어떤 아이디어가 있습니까 :
#include <boost/interprocess/containers/map.hpp>
#include <boost/interprocess/allocators/allocator.hpp>
#include <boost/interprocess/managed_shared_memory.hpp>
typedef char * KeyType;
typedef long ValueType;
typedef std::pair<const char *, long> Type_Value;
typedef boost::interprocess::allocator<Type_Value, boost::interprocess::managed_shared_memory::segment_manager> ShmemAllocator;
typedef boost::interprocess::map<KeyType, ValueType, std::less<KeyType>, ShmemAllocator> MyMap;
...
MyMap * myMap = segment.construct<MyMap>("CyValoresRTD") //object name
(std::less<char *>() //first ctor parameter
,alloc_inst); //second ctor parameter
...
char * text = "some text";
long value = 1234;
myMap->insert(std::make_pair(text, value));
이 삽입 호출이 나에게 약간의 오차가 있습니다?
문제와 관련이 있는지는 모르지만'map'의 실제'value_type'은'pair '이 아닌'pair '입니다. 나는. 'Type_Value' typedef가 올바르지 않습니다. –
ildjarn
팁 주셔서 감사합니다! 불행히도 이것은 문제가 아니 었습니다. =) – George