设计类用c ++解析不同版本的二进制文件

时间:2014-05-23 04:37:26

标签: c++ version binaryfiles

我想解析一些二进制文件。我们可以说该文件只包含file_header和file_content。我们使用YFileHeader和YfileContent来表示它。

对于整个二进制文件,我使用YFile来表示它。

我只关心YFileHeader中的flag1和flag2。这将在YFile中用来做一些复杂的事情。

class YFileHeader {
    private:
        int flag1;
        int flag2;
    public:
        int getF1() { return flag1; }
        int getF2() { return flag2; }
};

class YfileContent {
    public:
        int len;
        char* c;
};

class YFile {
    private:
        YFileHeader h;
        YFileContent c;
    public:
        int getF1() { return h.getF1(); }
        int getF2() { return h.getF2(); }
        int yf {
            /*
             * do some complex things with getF1() and getF2()
             */
            return getF1() + getF2();
        }
        char* getContent() { return c.c; }
};

/*
 *  YFile* yFile = (YFile*) mmap(....);
 *  yFile->yf();
 *  yFile->getContent();
 */

但是文件版本发生了变化,导致文件Header的布局发生了变化,其余的  不

class YFileHeader_v2 {
    private:
        int flag1;
        int foo;
        int flag2;
    public:
        int getF1() { return flag1; }
        int getF2() { return flag2; }
};

如何设计YFileHeader和YFile?我认为困难是: 1.可以更改YFileHeader的长度。 2.我们不能使用仅包含一些虚方法的Base类。因为如果是这样,任何派生类都会添加一个vpt成员。

0 个答案:

没有答案