ciao.
Sto cercando di capire il type erasure , ma ho un qualche problema:
in virtu di cosa il tipo scompare?codice:class Weapon {}; class Armor {}; class Helmet {}; class Scroll {}; class Potion {}; class Object { struct ObjectConcept { virtual ~ObjectConcept() {} }; template< typename T > struct ObjectModel : ObjectConcept { ObjectModel( const T& t ) : object( t ) {} virtual ~ObjectModel() {} private: T object; }; boost::shared_ptr<ObjectConcept> object; public: template< typename T > Object( const T& obj ) : object( new ObjectModel<T>( obj ) ) {} }; int main() { std::vector< Object > backpack; backpack.push_back( Object( Weapon( SWORD ) ) ); backpack.push_back( Object( Armor( CHAIN_MAIL ) ) ); backpack.push_back( Object( Potion( HEALING ) ) ); backpack.push_back( Object( Scroll( SLEEP ) ) ); }
questo costruttore non ha un tipo template?codice:template< typename T > Object( const T& obj ) : object( new ObjectModel<T>( obj ) ) {}
e allora come mai
in cosa è utilizzato principalmente il type erasure?codice:backpack.push_back( Object( Weapon( SWORD ) ) ); //non è backpack.push_back( Object<xxx>( Weapon( SWORD ) ) );
ho visto un per esempio any di boost .
grazie.

Rispondi quotando