#include #include #include #include "WarehouseT.h" #include "BuildingT.h" #include "FarmT.h" using namespace std; int main() { WarehouseT warehouse; cout << "A generic bulding" << endl; BuildingT::CanBuild(warehouse, BuildingTypeT::FARM); BuildingT building(warehouse, BuildingTypeT::FARM); building.CanProduce(warehouse); building.Produce(warehouse); cout << endl; cout << "A farm " << endl; FarmT::CanBuild(warehouse, BuildingTypeT::FARM); FarmT myFarm(warehouse); myFarm.CanProduce(warehouse); myFarm.Produce(warehouse); cout << endl; cout << "A pointer to a BuildingT" << endl; unique_ptr genericBuilding = make_unique(warehouse, BuildingTypeT::FARM); genericBuilding->CanProduce(warehouse); genericBuilding->Produce(warehouse); cout << endl; cout << "A FarmT pointer to a FarmT" << endl; unique_ptr aFarm; aFarm = make_unique(warehouse); aFarm->CanProduce(warehouse); aFarm->Produce(warehouse); cout << endl; cout << "A BuldingT pointer to a FarmT" << endl; genericBuilding = make_unique(warehouse); genericBuilding->CanProduce(warehouse); genericBuilding->Produce(warehouse); cout << endl; cout << "Casting BuildingT a pointer to a FarmT" << endl; // wrong cast, but it will do for now. auto tmp = static_cast(genericBuilding.get()); tmp->CanProduce(warehouse); tmp->Produce(warehouse); return 0; }