从派生结构初始化const父结构成员

时间:2013-12-03 10:54:25

标签: c++ struct const

我正在编写一个结构层次结构,它们都来自相同的基本结构。所述基础结构具有标记字段,允许我识别其中的内容。现在我想自动初始化该字段,这样就没有错误,但是不想为每个派生结构编写初始化器。

我现在正在做的是使用中间代理结构来初始化基础结构。我头文件的浏览量很大:

enum class Tag
{
    Header ,
    Entry  ,

    Unknown = ~0
};

struct Chunk
{
    const Tag tag ;

    Chunk( Tag t = Tag::Unknown ) : tag( t ) {}
};

template< Tag TAG > struct ChunkProxy : public Chunk
{
    ChunkProxy( void ) : Chunk( TAG ) {}
};

struct HeaderChunk : public ChunkProxy< Tag::Header >
{
    int whatever = 0 ;
};

struct EntryChunk : public ChunkProxy< Tag::Entry >
{
    int somedata = 0 ;
};

我觉得在那里有那个块代理感觉不舒服,感觉可能有更好的方法来实现这个目标;并且chunk不能是模板类本身,因为我无法通过指针传递它。

注意:我这样做是为了帮助我解析分块数据流,将从字符串读取的内存直接映射到pod结构。

编辑:根据Archie的回答,我已经向Chunk添加了一个构造函数,并从ChunkProxy构造函数中删除了const_cast。

1 个答案:

答案 0 :(得分:1)

为什么不向Chunk添加构造函数?

struct Chunk
{
    const Tag tag;

    Chunk() : tag(Tag::Unknown) {}
    Chunk(Tag tag) : tag(tag) {}
};

template<Tag TAG> struct ChunkProxy : public Chunk
{
    ChunkProxy(void) : Chunk(TAG) {}
};

实际上,使用此构造函数解决方案,您可以完全跳过ChunkProxy

struct Chunk
{
    const Tag tag;

    Chunk() : tag(Tag::Unknown) {}
    Chunk(Tag tag) : tag(tag) {}
};

struct HeaderChunk : public Chunk
{
    int whatever = 0;

    HeaderChunk(void) : Chunk(Tag::Header) {}
};

struct EntryChunk : public Chunk
{
    int whatever = 0;

    HeaderChunk(void) : Chunk(Tag::Entry) {}
};