나는 표준 : : ostringstream를 사용하여 수 std 번호를 쓰는 코드 : 문자열을 작성하는 문자열을 지정 지정명시 적으로 표준에 대한에 :: ostringstream
template<class T>
class Converter
{
private:
static std::string s_buffer;
public:
static const char* Out(const T& val)
{
std::ostringstream os;
os << val;
s_buffer = os.str();
return(s_buffer.data());
}
};
Converter::Out
이 많은라고합니다. 프로파일 러에 너무 많이 나타납니다. 그리고 본질적으로, 여기에서 발생하는 것은 :
- ostringstream의 인스턴스는 그것은에 쓰기 버퍼를 생성하고 쓰는 는
- 내가 정적 문자열 버퍼가 그것을 을 반환 할 것을 복사 생성
정적 문자열에 직접 쓰는 스트림을 얻을 수 있으므로 복사본을 피할 수 있다고 생각합니다. 성능이 약간 향상 될 수 있습니다. 하지만 어떻게 할 수 있습니까? std::ostringstream
은 컨스트럭터에서 const std::string
만 받아 들일 수 있습니다. 이는 예비 칠일 것이지, 쓸 버퍼가 아닙니다. 내가 하나를 발견하지 않았지만 어쩌면 부스트
http://en.cppreference.com/w/cpp/ : 부스트가 옵션 인 경우
, 당신은
string
또는vector<char>
의 지원boost::iostreams::filtering_ostream
를 사용할 수 있습니다 쉽게 상속을 통해 그 해결 할 수 string/basic_string/to_string – user657267['streambuf :: pubsetbuf'] (http://en.cppreference.com/w/cpp/io/basic_streambuf/pubsetbuf)를 호출하여 자신의 버퍼를 지정한 다음 'streambuf'에서 스트림을 생성 할 수 있습니다. 하지만 불행하게도 크기를 조정할 수없는 버퍼를 제공합니다. – jrok
@vsoftco 나는 이것이 완벽하게 표준을 따르는 코드라고 생각한다. 그리고 좋은 구현이 그것을 정확히 기대할 것이다. 문제는 실제로 얼마나 많은 구현입니다 ... – jrok