2 augusti, 2019 Inopto_AB

std locale 예제

전역 로캘. C++에는 C에 있는 것처럼 전역 로캘이 있습니다. 처음에는 전역 로캘이 위에서 설명한 클래식 로캘입니다. std:::locale:global()를 호출하여 전역 로캘을 변경할 수 있습니다. 멤버 클래스는 각 고유한 로캘 면에 필요한 정적 멤버 개체를 설명합니다. 클래스 ID의 개체를 복사하거나 할당할 수 없습니다. 전역 C++ 로캘을 사용하면 C에서와 마찬가지로 많은 작업을 수행할 수 있습니다. 프로그램 시작 시 네이티브 로캘을 한 번 활성화하면 전역으로 만들고 로캘에 종속된 모든 작업에 해당 의 스냅숏을 사용합니다. 다음 코드는 이 절차를 보여 줍니다: 기본 로캘은 C 및 C++ 프로그래머가 이 모든 년 동안 사용되어 온 C 로캘입니다(기본적으로 영어 및 미국 문화). 모든 스트림은 처음에 C 로캘에 스며들어 있습니다. imbue() 멤버 함수는 스트림에서 사용하는 로캘을 변경합니다. 프랑스어 로캘의 전체 ISO 이름이 표시됩니다(즉, 프랑스어에서 사용되는 프랑스어와 다른 국가에서 사용되는 프랑스어). 이 예제에서는 이 로캘이 숫자 표시의 radix 포인트에 쉼표를 사용한다는 것을 보여 줍니다.

이 로캘의 규칙에 따라 입력을 수행하려면 cin을 동일한 로캘로 변경해야 합니다. 이러한 면의 미리 정의된 그룹은 표준 C 라이브러리에서 전통적으로 관리되는 로캘 범주를 함수 setlocale에 의해 나타냅니다. std::locale:locale()에 대한 기본 생성자를 호출하여 현재 전역 로캘의 스냅숏을 만들 수 있습니다. 스냅숏은 변경할 수 없는 로캘 개체이며 전역 로캘에 대한 이후 변경 사항의 영향을 받지 않습니다. 할당 연산자와 소멸자의 정의는 별로 흥미롭지 않기 때문에 생략했습니다. 또한 잡지 문서에 맞지 않기 때문에 문자열에서 로캘 생성자의 정의를 생략했습니다 (예제 2에서 사용됨). 파생은 로캘을 확장할 수 있는 유일한 방법은 아닙니다. 당신은 당신의 자신의 면을 만들고, 그것을 보유하는 로캘을 구성 할 수 있습니다. 실시예 4는 앞서 언급한 통계 면 샘플입니다. 반면에 C++ 로캘을 사용하는 경우 문제가 사라집니다. 각 스트림에 별도의 로캘 오브젝트가 스며들 수 있으므로 의도하지 않은 스위치가 불가능합니다.

이제 C++ 로캘이 어떻게 사용되는지 살펴보겠습니다. XPG4에 따르면 C 로캘은 지정된 로캘의 면을 대상 로캘에 삽입하는 여러 범주로 구성됩니다. 로케일 (const 로케일 & 록, const 로케일 및 기타, 카테고리 고양이); 사용자가 로캘을 사용하는 operator<<에서 생성한 형식을 어떻게 제어할 수 있습니까? 실시예 2는 가장 간단한 예일 수 있다. 네이티브 로캘입니다. 네이티브 로캘이라는 용어를 사용하여 사용자 또는 시스템 관리자가 선호하는 로캘로 선택한 로캘을 설명합니다. UNIX 시스템에서는 일반적으로 LANG과 같은 환경 변수를 설정하여 수행됩니다. 생성자 std::locale(")를 호출하여 네이티브 로캘에 대한 C++ 로캘 개체를 만들 수 있습니다. 빈 문자열은 C 라이브러리 함수 std::setlocale("")와 같은 방식으로 환경에서 로캘 이름을 가져옵니다. 사용자 고유의 면을 만들어 기존 로캘 개체에 설치할 수도 있습니다. 예: 각 로캘 개체는 면 객체 집합을 유지 관리합니다. 실제로 아래 그림 5에 설명된 대로 C++ 로캘을 면의 컨테이너로 생각할 수 있습니다.

(실제 프로그램에서는 파일에서 통계 생성자 인수를 얻을 수 있습니다.) 포인터 인수에서 면 형식을 추론하는 로캘 클래스의 템플릿 생성자 중 하나를 사용합니다(그림 5 참조).

Kontakta oss!