2016-12-15 86 views
1

说我有一类统一像这样:初始化可变长度c-串类

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

不是结构,它是一个类。 –

+0

已编辑。谢谢。 –

回答

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

如果将其声明为char * m_name;在第一次分配后,它将采用有效的大小。 并且可以在未来太受

char * m_name = (char *)malloc(n * sizeof(char));//size_t count is the n 
+0

我认为海报打算让班级拥有C字符串。 – jamesdlin

1

你需要动态的东西动态分配改变这一点。假设你有:

Uniform array[10]; 

或:

std::vector<Uniform> v; 

你怎么能指望编入索引,如果每个Uniform具有可变大小? Uniform必须在编译时已知固定大小。