By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
448,967 Members | 1,625 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 448,967 IT Pros & Developers. It's quick & easy.

Generic Abstract Factory

P: n/a
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
Jul 19 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
Sebastian Faust wrote:
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[i])(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

Jul 19 '05 #2

P: n/a
Sebastian Faust wrote:
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.

--
Noah Roberts
- "If you are not outraged, you are not paying attention."

Jul 19 '05 #3

P: n/a
Sebastian Faust wrote:
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.
Jul 19 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.