Boost logo

Boost Users :

Subject: [Boost-users] Bind to a member's class method.
From: Konrad Rybacki (konrad.rybacki_at_[hidden])
Date: 2014-03-21 07:00:25


Hi,

I am rather beginner at boost - I am trying to achieve functionality
similiar to property getter/setter from managed languages like C#. I
have written the following code:

#include "boost\lambda\bind.hpp"
#include "boost\variant.hpp"
#include "boost\optional.hpp"

#include <iostream>
#include <map>

class Test
{
public:
    boost::optional<boost::variant<int, std::string>> m_value;
};

int _tmain(int argc, _TCHAR* argv[])
{
    Test t1, t2;

    auto b1 = boost::lambda::bind(&Test::m_value, boost::lambda::_1);
    auto b2 = boost::lambda::bind(Test::m_value::get_value_or,
boost::lambda::_1, "empty");

    b1(t1) = "Test value";

    std::cout << b2(t1); // "Test value"
    std::cout << b2(t2); // Should be "empty"

    return 0;
}

Unfortunately the compilers says:

boost_tests.cpp(32): error C3083: 'm_value': the symbol to the left of
a '::' must be a type
boost_tests.cpp(32): error C2039: 'get_value_or' : is not a member of 'Test'
boost_tests.cpp(22) : see declaration of 'Test'
boost_tests.cpp(32): error C2065: 'get_value_or' : undeclared identifier
boost_tests.cpp(32): fatal error C1903: unable to recover from
previous error(s); stopping compilation

I'd like to create a bind to Test::m_value.get_value_or() function
with the first parameter set to "empty" - any ideas how to achieve
that?

Regards,
Konrad.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net