我正在尝试创建一个包含NBT格式中指定的任意值的类。它是一种json,但更先进。
因此,我创建了一个包含ListValue(没有名称的值)的类和另一个包含Value(包含名称)的类。在派生类中,我从基数
提升=运算符using ListValue::operator=;
在第三个文件中,我有两个用法:
using CompoundData = std::vector<Value>;
using ListData = std::vector<ListValue>;
ListValue的私有成员为:
union ValueHolder
{
Byte vByte;
Short vShort;
Int vInt;
Long vLong;
Float vFloat;
Double vDouble;
String* pString;
CompoundData* pCompound;
} mData;
(我稍后会添加ListData *)
问题是我完全不知道如何包含所有这些标题,因此它将与循环一起使用。我尝试了几个前向声明和容器作为向量或向量与智能指针打破它,但没有任何作用。
如果您能帮助我为我的代码提供一个(n)想法/解决方案,我将非常感激。非常感谢你。
答案 0 :(得分:0)
简单的方法是:
struct CompoundData;
struct ListData;
然后在其他地方:
struct CompoundData : std::vector<Value> {
using std::vector<Value>::vector;
CompoundData& operator=(std::vector<Value> const& o) {
static_cast<std::vector<Value>&>(*this)=o;
return *this;
}
CompoundData& operator=(std::vector<Value> && o) {
static_cast<std::vector<Value>&>(*this)=std::move(o);
return *this;
}
CompoundData(std::vector<Value> const& o):
std::vector<Value>(o)
{}
CompoundData(std::vector<Value> && o):
std::vector<Value>(std::move(o))
{}
CompoundData()=default;
CompoundData(CompoundData const&)=default;
CompoundData(CompoundData &&)=default;
CompoundData& operator=(CompoundData const&)=default;
CompoundData& operator=(CompoundData &&)=default;
};
这是一堆样板,上面写着“不,我与{I}继承的std::vector
并没有什么不同”,ListData
也是如此。