[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