0

在最近的 SO回答中,部分片段我无法理解发生了什么,

struct VariableDepthList : std::variant<std::vector<VariableDepthList>, int> {
private:
    using base = std::variant<std::vector<VariableDepthList>, int>;
public:
    using base::base;
    VariableDepthList(std::initializer_list<VariableDepthList> v) : base(v) {}
};

base(v)是基类的调用ctor,如果是这样,什么相当于没有using base::base

4

1 回答 1

2

什么相当于没有using base::base

您将其替换为以下内容base的别名:

struct VariableDepthList : std::variant<std::vector<VariableDepthList>, int> {
private:
public:
    VariableDepthList(std::initializer_list<VariableDepthList> v) :
        std::variant<std::vector<VariableDepthList>, int>(v) // was "base(v)"
   {}
};

请注意,如果没有using类构造函数,. 的用户将无法访问它们VariableDepthList

如果您确实希望基类构造函数可用,而无需创建别名base

struct VariableDepthList : std::variant<std::vector<VariableDepthList>, int> {
private:
public:
    using std::variant<std::vector<VariableDepthList>, int>::variant;
    
    VariableDepthList(std::initializer_list<VariableDepthList> v) :
        std::variant<std::vector<VariableDepthList>, int>(v) // was "base(v)"
   {}
};
于 2021-12-22T17:55:55.540 回答