What is wrong here? It looks fine to me

N

Neil Morgenstern

Reproduced sample of the kind of thing I am trying to do. This fails
with VC2008, I'm not sure if it's an error in the code or in the
VC2008 library. I tried Comeau tryitout and it didn't recognise the
tr1 parts even though I am including all of the relevant headers so no
help there, unfortunately.

#include <memory>
#include <algorithm>
#include <functional>
#include <vector>
#include <iostream>
#include <sstream>

class Abstract1
{
public:
virtual ~Abstract1()
{
}

virtual std::string gimme() const = 0;
};

class Derived1 : public Abstract1
{
std::string gimme() const
{
return "Take It\n";
}
};

class Abstract2
{
public:
virtual ~Abstract2()
{
}


virtual void getme( const Abstract1 & abs1, std::eek:stream & ostr ) =
0;
};

class Derived2 : public Abstract2
{
public:
void getme( const Abstract1 & abs1, std::eek:stream & ostr )
{
ostr << abs1.gimme();
}
};

using std::tr1::shared_ptr;
using std::tr1::bind;
using std::tr1::placeholders::_1;
using std::tr1::ref;
using std::tr1::cref;

int main()
{
shared_ptr< Abstract1 > ptr1( new Derived1 );

typedef shared_ptr< Abstract2 > Ptr2;

std::vector< Ptr2 > ptr2Vec;

ptr2Vec.push_back( Ptr2( new Derived2 ) );
std::eek:stringstream oss;

std::for_each( ptr2Vec.begin(), ptr2Vec.end(),
bind( &Abstract2::getme, _1, cref( *ptr1 ), ref( oss ) ) );

std::cout << oss.str();
}

The error messages I am getting relate to Abstract1 being abstract (it
doesn't have a problem with Abstract2) even though I am clearly
passing the 3rd parameter in bind with the cref() modifier so it
should be passing through just a const reference.

In my real code I have had to workaround with a home-made functor.
Took me a few seconds to write that, but I'd rather use bind than have
to write functors.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,013
Latest member
KatriceSwa

Latest Threads

Top