2013-11-20 2 views
1

나는 코드의 다음 줄에 로케일을 만들려고 :VC6 - 사용자 정의면을 사용하여 std :: locale을 만드는 방법은 무엇입니까?

std::locale loc(std::locale::classic(), new comma); 

comma의 정의는 다음과 같습니다 내가 MSDN 설명서에있는 유사한 생성자 호출을 본대로 작동한다고 생각

struct comma : std::numpunct<char> { 
    char do_decimal_point() const { return ','; } 
}; 

~ facet. 불행히도 오류가 발생합니다.

error C2664: '__thiscall std::locale::std::locale(const char *,int)' : cannot convert parameter number 1 from 'const class std::locale' in 'const char *'

알고 계시 겠지만, 어떻게해야 제대로 할 수 있습니까?

Stackoverflow에 대한 답변이 있는데,이 방법으로 올바르게 처리 할 수 ​​있습니다 (this 또는 this one). 그러나 이전 VC6 컴파일러는이 생성자를 지원하지 않습니다 (VC6 설명서의 예제에서이 생성자를 사용하지만). 하지만 VC6에서 패싯을 사용하는 방법이 있어야합니다. 그렇지 않으면 문서의 일부가되지 않습니다.

+0

당신은 VC6에 대한 변하지 않았고 앞으로도 낙관적 인 것입니다. 나는 MSDN 문서가 여전히 놀랍다. 그러나 확실히 더 이상 지원되지 않는다. 나는. 설명서가 틀린 경우 Microsoft는 수정하지 않습니다. – MSalters

+0

@ MSalters : 저는 사람들이 stackoverflow.com에 참여하는 것에 대해 낙관하고 있습니다. 더 자주 도움이되는 답변을 얻지 못했지만, 불행히도 아무도 VC6 부분을 파고 들지는 못합니다. –

+1

음, VC6을 다시보고 싶어하는 사람들보다 도도를 되살리기 위해 노력하는 사람들이 더 있습니다. – MSalters

답변

1

사용자 정의 패싯으로 std :: locale을 만들려면 _ADDFAC을 사용할 수 있습니다.

[...] you should write _ADDFAC(loc, Facet) to return a new locale that adds the facet Facet to the locale loc , since not all translators currently support the additional template constructors

VC6이 추가 템플릿 생성자를 지원하지 않는 것 다음 documentation to the locale constructor에서 나는이 정보가 도움이 힌트를 발견했다.

샘플 코드 :

std::istringstream iss("333,444"); // comma is decimal mark 
std::locale loc(std::_ADDFAC(iss.getloc(), new comma)); 
iss.imbue(loc); 
iss >> e; 
std::cout << e << std::endl; // prints 333.444 
+0

그 컴파일러를위한 최상의 소스는 여전히 독립형 MSDN이 1998 년이나 1999 년에 설치 한 것입니다. (승리 7 64bits :()에 설치할 수 없습니다.) MSDN 문서의 편집은 VC6이 느린 컴파일러처럼 작동하는 과거를 다시 작성합니다. VC6로 STL을 작성하는 것은 많은 부분적인 구현 때문에 번거롭다. – ColdCat

+0

내 컴퓨터의 VC6은 가상의 32 비트 XP 환경에서 돌아 간다. 이전의 대규모 프로젝트에서는 포팅하기 어렵다. 그것들을 새로운 IDE로 변환 할 수 있습니다. 단점은 VC6에서 STL을 사용할 때 항상 신중해야한다는 것입니다. –