|
From: John P. <jo...@ma...> - 2000-10-31 14:07:16
|
Ya that compiles. Actualy I negelected to note that mriIVisualAsset is a pure
virtual interface. So the hiarchy goes mriIAsset-->mriIVisualAsset-->mriSpriteAsset
mriSpriteAsset is then loaded using the SOME::Object<mriIVisualAsset>
could this be the problem?
-Quinticent
"Frank V. Castellucci" wrote:
> Did you try the sample code? If you get the same error, what gcc version
> are you using?
>
> Frank
>
> John Palmieri wrote:
> >
> > I still get the error:
> >
> > cannot convert `oAsset' from type `SOME::Object<mriIVisualAsset>' to type
> > `mriIAsset *'
> >
> > -Quinticent
> >
> > "Frank V. Castellucci" wrote:
> >
> > > You were right the first time, SOME::Object is not a class in the
> > > hierarchy and once you instantiate it:
> > >
> > > --> SOME::Object<mriIVisualAsset>oAsset(assets[0]);
> > >
> > > it IS only a SOME::Object/shared_ptr<mriVisualAsset>, but looking at the
> > > shared_ptr, you should be able to:
> > >
> > > --> mriAsset *asset = oAsset;
> > >
> > > which should call the coercion operator on boost::shared_ptr. At least
> > > that's how it behaves (compiles, runs without error) for me in the
> > > attached emulation test.
> > >
> > > "John Palmieri (Quinticent)" wrote:
> > > >
> > > > Linux/gcc -
> > > >
> > > > Hierarchy:
> > > >
> > > > mriIAsset
> > > > / \
> > > > / \
> > > > mriIVisualAsset mriIAudioAsset (There will be more in the future)
> > > >
> > > > I think the whole problem is that SOMELib uses some sort of smart pointers
> > > > that I haven't looked into. Tom is using them in SOME::Object.
> > > >
> > > > SOME::Object<T> expands to class SOME::Object : public boost_smart_ptr<T>
> > > >
> > > > I haven't looked at the boost stuff and I am not sure if boost_smart_ptr isA
> > > > T or hasA T. If it is hasA this will have to change. If it cannot be
> > > > downcast then it needs to be taken out of SOMELib as I am not sure what
> > > > benefits it gives.
> > > >
> > > > -Quinticent
> > > >
> > > > "Frank V. Castellucci" wrote:
> > > >
> > > > > What is the hierarchy? You may need dynamic_cast<> based on the rules of
> > > > > usage in 1998(E) C++ standard.
> > > > > What is the error, and what is the compiler/platform?
> > > > >
> > > > > John Palmieri wrote:
> > > > > >
> > > > > > I am trying to integrate SOMELib into snaglepuss and am having errors
> > > > > > with downcasting my objects.
> > > > > >
> > > > > > You see I have a hiarchy of interfaces for use with dynamicly loadable
> > > > > > assets (png, mp3, mpg files). They all get loaded and stuffed into
> > > > > > chests which are just glorified vectors of type mriIAsset *. Now each
> > > > > > of the assets can be rendered to the screen, audio device, etc. with a
> > > > > > call to the render() method. But, each type of asset also has enhanced
> > > > > > functionality based on their type so my png loader asset would also
> > > > > > inherit the interface mriIVisualAsset which would in turn inherit the
> > > > > > mriIAsset interface. The problem I am having is that when I load my
> > > > > > object I check to see if it is visual, audio. Let's say it is a visual
> > > > > > asset. I then use this code to construct the object:
> > > > > >
> > > > > > SOME::Object<mriIVisualAsset>oAsset(assets[0]);
> > > > > > //construct our asset
> > > > > > if(!oAsset.construct()){ ...
> > > > > >
> > > > > > this works fine but now I want to add this asset to my chest:
> > > > > >
> > > > > > asset = static_cast<mriIAsset *>(oAsset); //error here. I'm guessting
> > > > > > the template is not truly inheriting
> > > > > >
> > > > > > chest->addAsset( chestpos, asset );//I should be able to mix and match
> > > > > > different assests in my chest
> > > > > >
> > > > > > This is an important feature and as much as I know you love the boost
> > > > > > stuff if it restricts projects from using standard C++ mechanisms when
> > > > > > working with SOMELib it will have to go.
> > > > > >
> > > > > > -Quinticent
> > > > > >
> > > > > > _______________________________________________
> > > > > > somelib-devel mailing list
> > > > > > som...@li...
> > > > > > http://lists.sourceforge.net/mailman/listinfo/somelib-devel
> > > > >
> > > > > --
> > > > > Frank V. Castellucci
> > > > > http://corelinux.sourceforge.net
> > > > > OOA/OOD/C++ Standards and Guidelines for Linux
> > > > > http://PythPat.sourceforge.net
> > > > > Pythons Pattern Package
> > > > > _______________________________________________
> > > > > somelib-devel mailing list
> > > > > som...@li...
> > > > > http://lists.sourceforge.net/mailman/listinfo/somelib-devel
> > > >
> > > > _______________________________________________
> > > > somelib-devel mailing list
> > > > som...@li...
> > > > http://lists.sourceforge.net/mailman/listinfo/somelib-devel
> > >
> > > --
> > > Frank V. Castellucci
> > > http://corelinux.sourceforge.net
> > > OOA/OOD/C++ Standards and Guidelines for Linux
> > > http://PythPat.sourceforge.net
> > > Pythons Pattern Package
> > >
> > > ------------------------------------------------------------------------
> > >
> > > #include <iostream>
> > >
> > > template <typename T>
> > > class boostemul
> > > {
> > > public:
> > > boostemul(T *aT)
> > > :
> > > theValue(aT)
> > > {
> > > }
> > > operator T*( void ) const
> > > {
> > > return theValue;
> > > }
> > > private:
> > > T *theValue;
> > > };
> > >
> > > template <typename U>
> > > class somObjemu : public boostemul<U>
> > > {
> > > public:
> > > somObjemu( U *aU )
> > > :
> > > boostemul<U>( aU )
> > > {
> > > }
> > > };
> > >
> > > class mriAsset
> > > {
> > > public:
> > > mriAsset(){}
> > > virtual void render( void ) = 0;
> > > };
> > >
> > > class mriAudioAsset : public mriAsset
> > > {
> > > public:
> > > mriAudioAsset():mriAsset(){}
> > > virtual void render( void )
> > > {
> > > cout << "In audio render." << endl;
> > > }
> > > };
> > >
> > > class mriVisualAsset : public mriAsset
> > > {
> > > public:
> > > mriVisualAsset():mriAsset(){}
> > > virtual void render( void )
> > > {
> > > cout << "In visual render." << endl;
> > > }
> > > };
> > >
> > > int main( void )
> > > {
> > > mriVisualAsset anA2;
> > >
> > > somObjemu<mriVisualAsset> aObj(&anA2);
> > >
> > > mriAsset *pA = aObj;
> > > pA->render();
> > > return 0;
> > > }
> >
> > _______________________________________________
> > somelib-devel mailing list
> > som...@li...
> > http://lists.sourceforge.net/mailman/listinfo/somelib-devel
> _______________________________________________
> somelib-devel mailing list
> som...@li...
> http://lists.sourceforge.net/mailman/listinfo/somelib-devel
|