Generic Abstract Factory

S

Sebastian Faust

Hi,

I am currently reading the chapter about abstract factorys from "Modern C++
Design" and wondering how it would be possible to create an object which has
a constructor with parameters. At the moment I can't see any way how to
solve this problem? Is there any way how to implement such?
Furthermore I read in the GoF book that usually Abstract Factorys are
implemented using Factory Methods. At the moment I can't see where in the
generic case of Abstract Factory, Factory Methods are used.

Thanks in advance
Sebastian
 
T

Thomas Matthews

Sebastian said:
Hi,

I am currently reading the chapter about abstract factorys from "Modern C++
Design" and wondering how it would be possible to create an object which has
a constructor with parameters. At the moment I can't see any way how to
solve this problem? Is there any way how to implement such?
Furthermore I read in the GoF book that usually Abstract Factorys are
implemented using Factory Methods. At the moment I can't see where in the
generic case of Abstract Factory, Factory Methods are used.

Thanks in advance
Sebastian

Here is what I use:
class Any_Class
: public Some_Base_Class
{
public:
Any_Class(/* deault parameters */);
Any_Class(const Any_Class& ac); // copy constructor
Any_Class(istream& inp); // construct from text stream
virtual ~Any_Class();

static Some_Base_Class * create(istream& inp,
unsigned int id);
};

Some_Base_Class *
Any_Class ::
create(istream& inp, unsigned int id)
{
Some_Base_Class * p_base(NULL);
if (id = ID_ANY_CLASS)
{
p_base = new Any_Class(inp);
}
return p_base;
}


In the factory:
typedef Some_Base_Class * (*P_CREATE_FUNC)(istream& inp, id);

const P_CREATE_FUNC creation_table[] =
{
Any_Class::create()
};
const unsigned int NUM_CREATION_FUNCS = sizeof(creation_table)
/ sizeof(creation_table[0]);

Some_Base_Class *
Factory ::
create(istream& inp)
{
unsigned int id;
Some_Base_Class * p_base(NULL);

inp >> id;
for (unsigned int i = 0;
(p_base == NULL) && (i < NUM_CREATION_FUNCS); ++i)
{
p_base = (creation_table)(inp, id);
}
return p_base;
}

--
Thomas Matthews

C++ newsgroup welcome message:
http://www.slack.net/~shiva/welcome.txt
C++ Faq: http://www.parashift.com/c++-faq-lite
C Faq: http://www.eskimo.com/~scs/c-faq/top.html
alt.comp.lang.learn.c-c++ faq:
http://www.raos.demon.uk/acllc-c++/faq.html
Other sites:
http://www.josuttis.com -- C++ STL Library book
http://www.sgi.com/tech/stl -- Standard Template Library
 
N

Noah Roberts

Sebastian said:
Hi,

I am currently reading the chapter about abstract factorys from "Modern C++
Design" and wondering how it would be possible to create an object which has
a constructor with parameters.

No. But you can use the prototype pattern as Sebastian recommends.
 
G

Gianni Mariani

Sebastian said:
Hi,

I am currently reading the chapter about abstract factorys from "Modern C++
Design" and wondering how it would be possible to create an object which has
a constructor with parameters. At the moment I can't see any way how to
solve this problem? Is there any way how to implement such?
Furthermore I read in the GoF book that usually Abstract Factorys are
implemented using Factory Methods. At the moment I can't see where in the
generic case of Abstract Factory, Factory Methods are used.

Here is a complete generic factory template library that allows you to
create objects with various parameters (0 ... 3 args - but easily extended).

It's a tad long so I placed it on my web server.

http://mariani.ws/~gianni/at_factory.h

This is going to be part of the "Austria C++" library I'm toying with.

I'll be doing V 0.1 soon so critique (preferably friendly but I'll
accept anything) is welcome.

Copyright is mine. Use it via the GPL - I can be arm twisted to do LGPL.
 

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,763
Messages
2,569,563
Members
45,039
Latest member
CasimiraVa

Latest Threads

Top