2011-03-29 5 views
2

나는 INI 데이터 형식을로드/저장/생성하는 INI 클래스를 작성했지만 지금은 ASCII 문자로만 작동하지만 지금은이 문자를 사용하도록 확장하려고합니다. 문자 인코딩의 모든 유형, 그래서 char, wchar_t. 이렇게하기 위해서, 나는 파싱을하기위한 다양한 문자열 함수를 설정해야한다. 몇 가지 설정이 있지만 basic_string의 모든 유형에서 작동하도록 다시 작성해야합니다.다른 문자 인코딩으로 작동하는 템플릿 ToString 함수

제 질문과 관련하여 모든 유형의 문자 인코딩에서 작동하는 ToString 함수가 필요합니다. 어떻게해야합니까?

나는 다음과 같은 두 가지 기능이있다 : 나는 아직도 그것을 입력하는 동안

따라서
template <typename T> 
static string toStr(const T& val) 
{ 
    stringstream out; 
    out << val; 
    return out.str(); 
} 

template <typename T> 
static wstring toWStr(const T& val) 
{ 
    wstringstream out; 
    out << val; 
    return out.str(); 
} 

답변

2

내가 원래 내가 대답에 가까웠다이 질문을 게시하지만, 부주의 한 실수를하고, 내 자신의 문제를 해결 한 . 문자열 인코딩의 다양한 작동하는 일반의 toString 기능을 원하는 분들을위한 그래서, 여기 당신은 간다 :

template<typename CharType, typename T> 
static basic_string<CharType, char_traits<CharType>, allocator<CharType>> toString(const T& val) 
{ 
    basic_stringstream<CharType> out; 
    out << val; 
    return out.str(); 
} 
+0

좋은 일을! 그러나 원래 기능을 사용하는 것이 좋습니다. 템플릿 매개 변수가있는 바이올린보다 적절하게 명명 된 함수를 사용하는 것이 더 편합니다. 'toString (123)'. 그냥 좋아 보인다. 컴파일 타임 다형성이 필요하지 않는 한. –

+0

@Stefan 제 INI 시스템에서는 인코딩을 지정할 수 있습니다. JSON 파서를 직접 작성할 때 템플릿을 사용하여 인코딩을 지정할 수도 있습니다. 그래서 더 좋은 옵션이 없다면, 이것이 내가 할 수있는 유일한 방법이라고 생각합니다, 네? – leetNightshade

+0

거의 예. 예를 들어 수업이있는 경우 'template class IniFile; 그리고 적절한 toString() 오버로드를 호출하기를 원한다면 올바른 방법이 될 것입니다. 컴파일 타임 다형성이 의미하는 바입니다. –

관련 문제