I have a bottleneck to my code:
Code:
void CSomeClass::SomeMethod(const std::string& method, const std::function<void (CMyObject)>& handler)
{
//
}
void CSomeClass::RegisterHandler(const web::http::method& Method, const MethodFn& Fn)
{
m_methodHandlerMap[Method] = Fn;
}
MethodHandlerMap CMyClass::GetHandlerMap() const
{
return m_methodHandlerMap;
}
using MethodFn = std::function<void(CMyObject&)>;
using MethodHandlerMap = std::unordered_map<std::string, MethodFn>;
MethodHandlerMap m_methodHandlerMap;
// code block
{
CSomeClass sc;
sc.RegisterHandler("AMethod", std::bind(&CSomeClassExtended::AMethod, this, std::placeholders::_1));
}
// code block
{
auto localMap = m_pMyClass->GetHandlerMap();
std::for_each(localMap.begin(), localMap.end(),
[this](const auto& handlePair)
{
m_object.SomeMethod(handlePair.first, handlePair.second); // ERROR !!! see below
});
}
and the error I got:
// error C2664: 'void CSomeClass::SomeMethod(const std::string &, const std::function<void (CMyObject)> &)': cannot convert argument 2 from 'const _Ty2' to 'const std::function<void (CMyObject)> &'
// note: Reason: cannot convert from 'const _Ty2' to 'const std::function<void (CMyObject)>'
the fact is that I write:
std::for_each(localMap.begin(), localMap.end(),
[this](const auto& handlePair)
{
m_object.SomeMethod(handlePair.first, nullptr); // is compiling ok
});
I didn't write the lambda correctly ? What I have done wrong ?