时间:2016-05-31 14:02:12

标签: c++ class c++11 derived

我正在尝试创建一个包含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)想法/解决方案,我将非常感激。非常感谢你。

1 个答案:

答案 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也是如此。