你不能用括号来做到这一点,但你可以使用统一的初始化语法(即使用大括号)。
您所需要的只是一个构造函数,Edge
它接受两个整数(您已经拥有)和 astd::initializer_list<Edge>
作为Graph
' 构造函数的唯一参数(您几乎拥有,只是缺少模板参数):
#include <initializer_list> // FOR std::initializer_list
struct Edge
{
Edge(int out, int in) { /* ... */ }
// Do not put any constructor taking an std::initalizer_list here,
// otherwise it will be picked instead of the one above when using
// uniform initialization syntax.
// ...
};
struct Graph
{
Graph(std::initializer_list<Edge> list) { /* ... */ }
// ...
};
然后,您可以按如下方式构建图表:
int main()
{
Graph g1 = { {1,2}, {3,4}, {5,1}, {5,3} };
Graph g2 = { Edge(1,2), Edge(3,4), Edge(5,1), Edge(5,3) };
Graph g3 = { Edge{1,2}, Edge{3,4}, Edge{5,1}, Edge{5,3} };
}
这是一个编译的实时示例。