Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Problems with tr1::bind and reference to abstract class

Reply
Thread Tools

Problems with tr1::bind and reference to abstract class

 
 
Neil Morgenstern
Guest
Posts: n/a
 
      08-21-2009
This is a workable example of what I am trying to do in the real
situation that reproduces the error. I could not tryitout on Comeau
which does not seem to recognise tr1, at least not in the standard
headers.

I am trying to compile it on VC2008 and am including the relevant
headers for it.

-------------

#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:stream & ostr ) =
0;
};

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

using std::tr1::shared_ptr;
using std::tr1::bind;
using std::tr1:laceholders::_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:stringstream oss;

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

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

---------

The error I am getting is that Abstract1 is abstract, no problem it
would seem with Abstract2, but because I am passing with the cref
modifier that should get around the problem and pass it as a const
reference (as the function getme requires).

I get the same error if I dereference ptr1 first and put cref around
the const reference, and also I get the error even if I use a non-
const reference.

In my real code I did the simple workaround of a functor (which took a
few seconds to write) but I'd rather be able to use bind than have to
write functors.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
what is the difference between abstract class and pure abstract class? skishorev@yahoo.co.in C++ 4 05-17-2006 08:07 AM
Abstract Methods & Abstract Class Iyer, Prasad C Python 0 10-20-2005 06:35 AM
About abstract class and abstract method Sameer Java 4 08-31-2005 12:59 AM
Deriving abstract class from non-abstract class Matthias Kaeppler Java 1 05-22-2005 01:28 PM
Abstract class with no abstract functions Uzytkownik C++ 3 04-03-2005 05:45 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57