ciao.
Sto cercando di capire il type erasure , ma ho un qualche problema:
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 ) ) );
}
in virtu di cosa il tipo scompare?
codice:
template< typename T > Object( const T& obj ) :
object( new ObjectModel<T>( obj ) ) {}
questo costruttore non ha un tipo template?
e allora come mai
codice:
backpack.push_back( Object( Weapon( SWORD ) ) );
//non è
backpack.push_back( Object<xxx>( Weapon( SWORD ) ) );
in cosa è utilizzato principalmente il type erasure?
ho visto un per esempio any di boost .
grazie.