
OK. Next stage: define a small helper: std::string removeConst (const std::string& s) { return s; } // define a ptr to member func std::string::replace std::string & (std::string::*rep)(std::string::size_type, std::string::size_type, const char *) = &std::string::replace; // try to transform from // but will not work. Compile fails std::transform(array.begin(), array(), std::back_inserter(tr), boost::bind(rep, boost::bind(&removeConst, boost::bind(&Foo::get, _1)), 0, 5, "")); // however that will work, so I probably missing something up there std::transform(array.begin(), array(), std::back_inserter(tr), boost::bind(&removeConst, boost::bind(&Foo::get, _1))); Any idea? Thanks, Kobi. On 4/27/06, Kobi Cohen-Arazi <kobi.cohenarazi@gmail.com> wrote:
Hi Sebastian,
Hmmm...... I think I know what the problem is ... Foo::get is const
struct Foo{ std::string get() const { ... } };
So it is not a good candidate to use in string::replace. I wonder how I can work around it, since I want to transform a _copy_ of that. Is there a way to create a copy on the fly? something like: ...bind(rep, std::string(bind(&Foo::get, _1)), 0, 5, ""));
Thanks again for your insights. Kobi.
On 4/27/06, Sebastian Redl <sebastian.redl@getdesigned.at> wrote:
Kobi Cohen-Arazi wrote:
Hi,
I've tried that, and I got a bunch of errors. I'm using boost::bind for that, not boost::lambda. Here is the error
The following line: std::transform(array.begin(), array.end(), std::back_inserter(tr), bind(&std::string::replace, bind(&Foo::get, _1), 0, 5, ""));
generates: error: no matching function for call to 'bind(<unknown type>, boost::_bi::bind_t<const std::string&, boost::_mfi::cmf0<const std::string&, Foo>, boost::_bi::list1<boost::arg<1> > >, int, uint32_t&, const char [1])'
Hmmm ... the <unknown type> is suspicious. The problem might be that &std::string::replace is ambiguous, as it is overloaded. Try this:
std::string & (std::string::*rep)(std::string::size_type, std::string::size_type, const char *) = &std::string::replace; std::transform(array.begin(), array.end(), std::back_inserter(tr), bind(rep, bind(&Foo::get, _1), 0, 5, ""));
Sebastian Redl _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users