C スタイルの関数strftimeに便利なラッパーを書きたいと思います。そして、文字配列を文字列に、またはその逆に変換するいくつかのオプションにたどり着きました。これが私のコードです:
std::string Time::getAsFormattedString ( const std::string& format , const size_t& maxStringSize = 999 )
{
char* timeArray = 0;
std::string timeString;
// [OPTION_0]
timeArray = reinterpret_cast <char*> (malloc(sizeof(char)*maxStringSize)));
// [OPTION_1]
timeArray = const_cast <char*> (timeString.c_str());
// [OPTION_2]
timeArray = &(*(timeString.begin()));
strftime(timeArray,maxStringSize,format.c_str(),&this->time);
timeString = timeArray;
// [OPTION_0]
free(timeArray);
return timeString;
}
メモリを解放する前に例外をスローできないため、№0オプションは安全に見えます(編集:例外をスローできます。timeString = timeArray
その行の周りにtry-catchが必要です)
№1 const-casting は常にハックのように見える
№2は、いくつかの問題があるかどうかわからないため、最高のようです
どれが最も安全で、正しく、最適で、おそらくベスト プラクティスであるかを教えてください。
ありがとうございました。