2016-12-15 13 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]; 

か:あなたは、各Uniformは可変サイズを持っている場合、インデックスが動作することを期待するにはどうすればよい

std::vector<Uniform> v; 

Uniformは、コンパイル時に既知の固定サイズでなければなりません。

関連する問題