说我有一个 Uniform 这样的课程:
class Uniform {
public:
Uniform(const char* name, size_t count, size_t elemSize, void* data);
private:
size_t m_count;
size_t m_elemSize;
void* m_data;
char m_name[];
}
有没有办法初始化 m_name ,以便包含的数据紧密包装?我不必在字符串上使用高水位标记(例如 char m_name [MAX_STR_LEN]; )或动态分配它。
答案 0 :(得分:2)
如果您将其声明为char * m_name;在第一次分配后,它将采用有效的大小。 你也可以通过
来改变这一点char * m_name = (char *)malloc(n * sizeof(char));//size_t count is the n
答案 1 :(得分:2)
flexible arrays是C99功能。使用std::string
,std::unique_ptr<char[]>
或char *m_name = new char[...
OR
使用模板
template <size_t size>
class Uniform {
public:
Uniform(const char* name, size_t count, size_t elemSize, void* data);
private:
size_t m_count;
size_t m_elemSize;
void* m_data;
std::array<char, size> m_name;
}
答案 2 :(得分:1)
您需要动态分配动态内容。假设你有:
Uniform array[10];
或:
std::vector<Uniform> v;
如果每个Uniform
具有可变大小,您期望索引如何工作? Uniform
必须在编译时知道固定大小。