[alicebot-developer] ChatterBean 00.007 is now available

mehri foreverlinux at yahoo.com
Sat Dec 10 15:35:18 PST 2005


Problem is that from the xml I get the AIML tag name
as a String.  From the string I have to instantiate
the class with the same name.  With reflection this
can be done easily.  Without reflection it's painful. 


For example, with C++ how can you do a:

String someClassName = "InnerTemplate";
return new someClassName;

I know of a few ways but none are elegant and all are
more complex then simply registering the classes in a
factory method:

Tag &tagClass createClass(String someClassName)
{
  if(someClassName == "InnerTemplate")
      return new InnerTemplate;
  else if(someClassName == "xxx")
      return new XXX
}

Right now I'm working on a dll layering scheme to
allow overriding or adding custom AIML tags.  The
creator of the dll will have to inherit from a factory
and write their own: 

Tag &tagClass createClass(String someClassName)

method.


--- Helio Perroni Filho <xperroni at yahoo.com> wrote:

> --- mehri <foreverlinux at yahoo.com> escreveu:
> 
> > //Boy I wish C++ had reflection :-(
> > Tag &createTag(String className)
> > {
> >    if(className == "category")
> >       return new Category;
> >    else if(className == "date")
> >       return new Date;
> >    else if // ... so on
> > 
> > }
> 
> Have you tried to use function pointers? For every
> tag, you would have a function responsible or
> returning a new instance of a given class, and then
> you could have a map collection mapping tag names to
> function pointers:
> 
> // Include the library for map templates.
> #include <map>
> 
> // ...
> 
> /* Function pointer type for a tag-maker function.
> */
> typedef Tag& (*TagMaker)(void);
> 
> /* Name-to-maker-function map. Must be filled
> somewhere else. */
> map<String, TagMaker> makers;
> 
> // ...
> 
> Tag &createTag(String className)
> {
>   /* Gets the function pointer from the map. */
>   TagMaker maker = makers[className];
> 
>   return maker();
> }
> 
> This might seem more complicated than Java
> reflection,
> but it is feasible, and for a lenghty set of
> possible
> tags, much more efficient than an if-then-else chain
> -- retrieving a value from the map takes a time of
> O(1) in assintotic notation, while going down a
> conditional chain takes O(n) in the worst case,
> where
> n is the length of the chain.
> 
> -- 
> Ja mata ne.
> Helio Perroni Filho
> 
> 
> 
> 	
> 
> 
> 
> 	
> 		
>
_______________________________________________________
> 
> Yahoo! doce lar. Faça do Yahoo! sua homepage. 
> http://br.yahoo.com/homepageset.html 
> 
> _______________________________________________
> alicebot-developer mailing list
> alicebot-developer at list.alicebot.org
>
http://list.alicebot.org/mailman/listinfo/alicebot-developer
> 


.................................................o' \,=./ `o
Mehri                                               (o o)
---=--=---=--=--=---=--=--=--=--=---=--=--=-----ooO--(_)--Ooo---

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


More information about the alicebot-developer mailing list