Initializer-lists作为类构造函数的参数

时间:2014-01-02 08:58:34

标签: c++ c++11 constructor

我有以下课程

template <class T>
class Graph {
    private:
        std::vector < std::vector<T> > data;
    public:
        class Edge {
            private:
                T source;
                T destination;
        };
};

我将尝试使用以边缘为中心的方法(https://stackoverflow.com/a/2157012/1864702)对有向图进行建模。

我希望能够以下列方式构造此类的对象:

enum Country {Poland, Ukraine, Germany, USA};
typedef Graph<Country> GC;

GC gc{
    { Poland, {Ukraine, Germany} },
    { Germany, {Poland, Ukraine, USA} },
    { USA, {Poland, Ukraine, USA} }
};

类Graph的构造函数应该采用什么样的参数来允许这样的语法?

1 个答案:

答案 0 :(得分:4)

您可以在Graph中添加一个帮助程序类,并获取这些帮助程序结构的初始化列表:

template <class T>
class Graph {
    private:
        std::vector < std::vector<T> > data;
        struct EdgeConstructor
        {
            T source;
            std::vector<T> destination;
        };
    public:
        class Edge {
            private:
                T source;
                T destination;
        };
        Graph(std::initializer_list<EdgeConstructor>) {}
};

Live example