Я использую графическую библиотеку, включенную в учебник по C ++, которая имеет следующее определение для фигуры, которая должна создавать объекты, состоящие из прямых линий.
struct Lines : Shape { // independent lines
Lines() {}
Lines(initializer_list<Point> lst)
: Shape{ lst }
{
if (lst.size() % 2)
error("odd number of points for Lines");
}
Lines(initializer_list<pair<Point>> lst)
{
for (auto p : lst) add(p.first, p.second);
}
void draw_lines() const;
void add(Point p1, Point p2) { Shape::add(p1); Shape::add(p2); }
}
Однако, когда я пытаюсь создать экземпляр структуры Lines, вот так:
Lines rec(Point{ 200,200 }, Point{ 100,100 }, Point{350,250});
Я получаю ошибку C2976, C2228 и C3202, утверждая:
C2976 - "std :: pair ': слишком мало аргументов шаблона"
C2228 - "pair": шаблон неспециализированного класса не может использоваться как
шаблон
аргумент для параметра шаблона '_Elem', ожидается реальный тип "
C2661 - "Graph_lib :: Lines :: Lines": перегруженная функция не требуется 3
аргументы "
У меня сложилось впечатление, что конструктор initializer_list позволяет инициализировать объект с несколькими элементами одного типа в качестве параметров.