From: Frank V. C. <fr...@co...> - 2000-10-31 13:28:45
|
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 |