2013-11-04 129 views
0

以下問題可能已被問到,但我找不到它。C++:實現write_padding函數

我創建了一個類BinaryWriter
我需要實現以下方法:

/// Write zero bytes to file 
    virtual void wr_padding(int padding_size); 

我有以下實現:

void BinaryWriter::wr_padding(int padding_size) 
{ 
    char pad_arr[padding_size]; 
    memset(pad_arr, 0, padding_size); 
    m_stream.write(pad_arr,padding_size); 
} 

其中:

std::ostream m_stream; 

我不開心與此實現。我希望爲這個簡單的任務提供一個ios API。有更多的本地實施?

感謝

+0

這甚至不是有效的C++ ... –

+0

什麼是無效的呢?請詳細說明.. – idanshmu

+0

@DannyElly C風格數組的尺寸必須是常數。 –

回答

2

首先,你的代碼是無效的; C風格數組的大小必須是 是一個常量。一個有效的版本是:

void 
BinaryWriter::wr_padding(int padding_size) 
{ 
    std::vector<char> pad_arr(padding_size); 
    m_stream.write(&pad_arr[0], pad_arr.size()); 
} 

但是:你能設置一些最大值爲padding_size? (在 XDR,例如,它永遠不會超過4)如果是這樣, 東西那樣簡單:

void 
BinaryWriter::wr_padding(int padding_size) 
{ 
    static char const pad_arr[ max_padding_size ] = {}; 
    m_stream.write(pad_arr, padding_size); 
} 

會做的伎倆。

+0

這是有效的C++,如果你不使用舊的編譯器。 ..在C中,你可以在c99 – benjarobin

+0

@benjarobin c99!= C++中做到這一點。這不是有效的C++,句點。 – jrok

+0

我喜歡第二個建議。謝謝 – idanshmu