Hi Manu,
You right :-).
I think in the introspection concept implemented by Marco Jez, If you use a
getCompatibleConstructor(...) or other low-level method in osgIntrospection,
you have to know the API as same as you write your code without
introspection.
David
2007/12/13, Emmanuel Roche < [EMAIL PROTECTED]>:
>
> Hi there !
>
> in the osgIntropsection framework, we use getCompatibleConstructor(...) or
> getCompatibleMethod(...), etc... to get a function considering the
> parameters offered. But it this process do the framework take into account
> the possible implicit parameter constructions ?
>
> I tried to check the sources, and as far as I understand, everything would
> happen in the function if it was the case (for example for the implicit
> convertion of a "const char*" object to "std::string"):
>
> bool Reflection::accum_conv_path(const Type& source, const Type& dest,
> ConverterList& conv, std::vector<const Type* > &chain, CastType castType)
> {
> // break unwanted loops
> if (std::find( chain.begin(), chain.end(), &source) != chain.end())
> return false;
>
> // store the type being processed to avoid loops
> chain.push_back(&source);
>
> // search a converter from "source"
> StaticData::ConverterMapMap::const_iterator i =
> getOrCreateStaticData().convmap.find(&source);
> if (i == getOrCreateStaticData().convmap.end())
> return false;
>
> // search a converter to "dest"
> const StaticData::ConverterMap& cmap = i->second;
> StaticData::ConverterMap::const_iterator j = cmap.find(&dest);
> if (j != cmap.end() && (j->second->getCastType() == castType))
> {
> conv.push_back(j->second);
> return true;
> }
>
> // search a undirect converter from "source" to ... to "dest"
> for (j=cmap.begin(); j!=cmap.end(); ++j)
> {
> if ((j->second->getCastType() == castType) &&
> accum_conv_path(*j->first, dest, conv, chain, castType))
> {
> conv.push_front(j->second);
> return true;
> }
> }
>
> return false;
> }
>
> ... but I can't see anything concerning the type constructors here, so I
> guess that to call a function you need to pass the exact type of parameter
> needed (with an exception for the derived classes, and inheritance system),
> for example:
>
> with the function void myfunc(std::string arg1, osg::Node* obj)
>
> the reflection framework would find a compatible method with the arguments
> : { std::string("test") , and osg::Group* myGroup } but it won't find
> anything with the pair { "test", osg::Node* myNode }... Am I wrong ??
>
> regards,
>
> Manu.
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org