Open alexey-malov opened 8 years ago
Используй заголовочные файлы с forward declaration классов и интерфейсов
Рисование лучше запускать внутри методов Visit, либо обеспечить механизм "накопления" информации о посещении. Это сделает возможным введение групповых фигур, которые внутри себя содержат вложенные фигуры
подсказка по 5 лабе:
void ExpectStringContent(const CMyString& str, const char * arr,])
{
BOOST_REQUIRE_EQUAL(str.GetLength(), len - 1);
BOOST_CHECK_EQUAL(memcmp(str.GetData(), arr, len), 0);
}
template <size_t len>
void ExpectStringContent(const CMyString& str, const char (&arr)[len])
{
ExpectStringContent(str, arr, len);
}
...
ExpectStringContent(myStr, "Hello\0world");
В CShapeManager::CreateShape слишком много кода. И он будет увеличиваться при введении доп. фигур Разбить на подфункции, сделать возможность легкого добавления новых типов фигур.
typedef function<unique_ptr<IShape>(const vector<string> & params)> ShapeCreator;
map<string, ShapeCreator> m_shapeCreators;
ShapeCreator MakeCreator(<Указатель на метод класса CShapeManager> p)
{
return bind(p, this, std::placeholders::_1);
}
m_shapeCreator["circle"] = MakeCreator(&CShapeManager::CreateCircle);
m_shapeCreator["rectangle"] = bind(&CShapeManager::CreateCircle, this, _1);
range-based for компактнее чем for_each
string ShapeToString(const shared_ptr<IShape> & shape)
{
return shape->ToString();
}
// Вывод фигур в cout через \n
boost::transform(shapes, ostream_iterator<cout>("\n"), ShapeToString);
Избавляйтесь от длинных цепочек вызовов
Не компилируется сравнение line segment-ов