如何替换基础构造函数调用
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 constructors,VariableDepthList
的用户将无法访问它们。
如果您做希望基础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)"
{}
};
在最近的 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 constructors,VariableDepthList
的用户将无法访问它们。
如果您做希望基础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)"
{}
};