I'm trying to figure out how to use the boost.lambda library, and I'm having some issues, probably stupid ones, but still, issues. In the following code I want to remove all obects from m_devices that only have 1 remaining reference (unique() returns true). Yes, I know that this would be pretty easy, using regular function pointers, and the like, however, I'm trying to learn this library.
What am I doing wrong? I would also appreciate any pointers for using boost.lambda
Whenever I compile the following code on VS2005 I get the following errors:
Warning 1 warning C4512: 'boost::lambda::identity<T>' : assignment operator could not be generated c:\program files (x86)\boost\boost_1_34_0\boost\lambda\detail\lambda_functor_base.hpp 43
Warning 2 warning C4512: 'boost::lambda::lambda_functor<T>' : assignment operator could not be generated c:\program files (x86)\boost\boost_1_34_0\boost\lambda\detail\lambda_functors.hpp 204
Warning 3 warning C4512: 'boost::lambda::identity<T>' : assignment operator could not be generated c:\program files (x86)\boost\boost_1_34_0\boost\lambda\detail\lambda_functor_base.hpp 43
Warning 4 warning C4512: 'boost::lambda::lambda_functor<T>' : assignment operator could not be generated c:\program files (x86)\boost\boost_1_34_0\boost\lambda\detail\lambda_functors.hpp 204
Error 5 error C2451: conditional expression of type 'boost::lambda::detail::member_pointer_caller<RET,A,B>' is illegal c:\program files (x86)\microsoft visual studio 8\vc\include\algorithm 87
Error 6 error C2675: unary '!' : 'boost::lambda::detail::member_pointer_caller<RET,A,B>' does not define this operator or a conversion to a type acceptable to the predefined operator c:\program files (x86)\microsoft visual studio 8\vc\include\algorithm 1240
Error 7 error C2582: 'operator =' function is unavailable in 'std::pair<_Ty1,_Ty2>' c:\program files (x86)\microsoft visual studio 8\vc\include\algorithm 1241
My code for the class I'm having trouble with follows:
#pragma
once
#include
<string>
#include
<map>
#include
<boost/shared_ptr.hpp>
#include
"SocketDevice.h"
namespace
Socket
{
class SocketFactory
{
public:
SocketFactory(std::string Host, std::string Port);
virtual ~SocketFactory(void);
protected:
std::pair<std::string, std::string> m_dest;
boost::shared_ptr<SocketDevice> m_device;
static std::map<std::pair<std::string, std::string>, boost::shared_ptr<SocketDevice>> m_devices;
private:
void RemoveUnreferencedSockets(void);
};
};
#include
"SocketFactory.h"
#include <boost/lambda/lambda.hpp>
#include
<boost/bind.hpp>
Socket::SocketFactory::~SocketFactory(
void)
{
}
void
Socket::SocketFactory::RemoveUnreferencedSockets(void)
{
std::remove_if(Socket::SocketFactory::m_devices.begin(),
Socket::SocketFactory::m_devices.end(),
boost::lambda::_1 ->* &std::pair<std::pair<std::string, std::string>, boost::shared_ptr<SocketDevice> >::second
->* &boost::shared_ptr<SocketDevice>::unique);
}