如何替换基础构造函数调用

how do I replace base constructor call

在最近的 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) 正在调用基数 class 的 ctor,如果是这样,相当于没有 using base::base

what is equivalent to without having 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 base class constructorsVariableDepthList 的用户将无法访问它们。

如果您希望基础class构造函数可用,而不创建别名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)"
   {}
};