提问人:ZeroZ30o 提问时间:2/16/2023 最后编辑:ZeroZ30o 更新时间:2/17/2023 访问量:78
继承 operator= 和构造函数,但也添加额外的包装器赋值
Inheriting operator= and constructor but also add an extra wrapper assignment
问:
我有以下结构:
struct Feedback : public TaggedUnion<Feedback1Idx, String>
{
using TaggedUnion<Feedback1Idx, String>::TaggedUnion;
using TaggedUnion<Feedback1Idx, String>::operator=;
bool isError = false;
};
...它继承了 TaggedUnion 的运算符 =,允许我编写以下内容:
Feedback a = Feedback1Idx();
Feedback b = String();
Feedback c = Feedback();
Feedback d = b;
在上面的示例中,我希望 a.isError 为 true,b.isError 为 true,但 c.isError 为 false(和 d.isError 为 true,因为 b.isError 为 true)。 换句话说,每当使用继承的运算符 = 时,我都希望将 .isError 切换为 true。
我怎样才能做到这一点?(无需为我添加到 TaggedUnion 的每个模板参数添加构造函数/赋值运算符<>)
答:
0赞
ZeroZ30o
2/17/2023
#1
我找到了一个简单的解决方案:
struct Feedback : public TaggedUnion<Feedback1Idx, String>
{
bool isError = false;
Feedback() = default;
Feedback(const Feedback& _other) = default;
template<typename TYPE>
Feedback(const TYPE& _other)
: TaggedUnion<Feedback1Idx, String>(_other)
{
this->isError = true;
}
Feedback& operator=(const Feedback& _other) = default;
template<typename TYPE>
Feedback& operator=(const TYPE& _other)
{
this->isError = true;
TaggedUnion<Feedback1Idx, String>::operator=(_other);
return *this;
}
};
需要注意的一件小事:如果您尝试执行 ,编译器可能会对您大喊大叫,或者其他一些不在继承类型中的类型。Feedback a = int
除此之外,应该一切都很好(测试了一下)。
上一个:用于生成迷你仪表板的自动化系统
下一个:链式分配如何工作?
评论
TaggedUnion::operator=