#include #include #include #include #include #include class OneVertexException:public std::exception{ public: const char * what(){ return "Edge must have minimum 2 vertices!"; } }; template class Point { public: template explicit Point(Ts... ts) : data_{ts...} { } T operator[](std::size_t index) const { return data_[index]; } private: std::array data_; }; template class LamanLine { std::vector> vectorOfPoints_; std::list, Point>> edges_; public: void addPoint(Point & newPoint) { if(vectorOfPoints_.size()>=1) { std::pair, Point> buf; buf.first = vectorOfPoints_.back(); vectorOfPoints_.push_back(newPoint); buf.second = vectorOfPoints_.back(); edges_.push_back(buf); } else { vectorOfPoints_.push_back(newPoint); } } double calculateLenght(){ double result=0; if(vectorOfPoints_.size()<2) throw OneVertexException(); for(auto &element: edges_) result += (double)distance(element.first, element.second); return result; } }; template std::ostream& operator<<(std::ostream& os, const Point& point) { os << "<"; for(std::size_t i = 0; i < N-1; ++i) { os << point[i] << ", "; } os << point[N-1] << ">"; return os; } // uzupelnic metode !!. template T distance(const Point& lhs, const Point& rhs) { T sum =0; for(size_t i=0; i(3,5); auto p2 = Point(6,3); auto p3 = Point(6,8); auto l2 = LamanLine(); l2.addPoint(p1); //l2.addPoint(p2); //l2.addPoint(p3); std::cout << p1 << p2 << std::endl; try { std::cout<< l2.calculateLenght()<