【发布时间】:2022-01-23 22:04:28
【问题描述】:
在最近的 SO answer 中,部分 sn-p 我无法理解发生了什么,
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?
【问题讨论】:
-
你不需要
using base::base;部分来使用base(v):后者总是(独立于using声明)构造基础对象,using声明用于在您的VariableDepthList中公开basector。 -
@DietmarKühl:如果
using base::base部分那么我看到了错误。 DEMO -
正如我所说:您不需要
using声明来定义ctor。根据您的使用情况,您可能需要它来绕过您的构造函数并直接使用基类的 ctor。由于没有std::initializer_list<int>可行的构造函数,但{ 1 }是std::initializer_list<int>,因此直接使用基类的构造函数。
标签: c++ constructor std-variant