, , : Point, () 1 , Point 2 , Point 3- . .
Point, 1 3 . , , , [i].size().
: , Point, , , [i].size() == 3? ?
, , . , , 1, 2 3 . , - :
template <typename Point, int N>
Point construct_point(const vector<string>& line);
template <typename Point>
Point construct_point<Point, 1>(const vector<string>& line)
{
assert(line.size() == 1);
return Point(atof ( line[0].c_str() ));
}
template <typename Point>
Point construct_point<Point, 2>(const vector<string>& line)
{
assert(line.size() == 2);
return Point(atof ( line[0].c_str() ), atof ( line[1].c_str() ));
}
template <typename Point>
Point construct_point<Point, 3>(const vector<string>& line)
{
assert(line.size() == 3);
return Point(atof ( line[0].c_str() ), atof ( line[1].c_str() ), atof ( line[2].c_str() ));
}
template <typename Point>
void List<Point>::load (const char *file)
{
...
for (unsigned i = 0; i < lines.size(); ++i)
{
items.push_back(construct_point<Point, Point::dimension>(lines[i]));
}
...
}