使用静态数组覆盖指针属性

时间:2015-12-29 10:14:58

标签: c++ oop c++11 c-strings

typedef struct chlnglck{
    friend struct chlnglck_8;
    friend struct chlnglck_10;
    friend struct chlnglck_12;

    chlng nb;
    uint64_t wt;
}chlnglck;

struct chlnglck_8 : chlnglck{
    char ress[255];
    chlnglck_8();
};

struct chlnglck_10 : chlnglck{
    char ress[1024];
    chlnglck_10();
};

这是我的代码。我想知道如何在父类ress中提及chlnglck属性。

有没有办法知道我必须在子类中使用固定大小的数组? 编辑:我的意思是以下内容:我最终可以在父级中声明一个指针,通过子级中的固定大小数组覆盖它。 (似乎不太可能,但不得不问最终的线索)

不,std::string请。

2 个答案:

答案 0 :(得分:4)

您可以使用模板解决它:

template<size_t N>
struct chlnglck
{
    chlng nb;
    uint64_t wt;

    std::array<char, N> ress;
};

struct chlnglck_8 : chlnglck<256> {};

struct chlnglck_10 : chlnglck<1024> {};

答案 1 :(得分:0)

typedef struct chlnglck{
    friend struct chlnglck_8;
    friend struct chlnglck_10;
    friend struct chlnglck_12;

    uint64_t wt;
    char *ress;
}chlnglck;

struct chlnglck_8 : chlnglck{       
    chlnglck_8(){
        ress = new char[255];
    }
    ~chlnglck_8(){
        delete []ress;
    }
};

struct chlnglck_10 : chlnglck{        
    chlnglck_10(){
        ress = new char[1024];
    }
    ~chlnglck_10(){
        delete []ress;
    }
};