개인 재정 C ++로 나만의 UDL을 생성하기

C ++로 나만의 UDL을 생성하기

차례:

비디오: [전체 다시보기] 나만의 첫 번째 C++ 애플리케이션 완성하기 with C++빌더 2024

비디오: [전체 다시보기] 나만의 첫 번째 C++ 애플리케이션 완성하기 with C++빌더 2024
Anonim

표준 라이브러리와 내장 기능 C ++에서는 재미있는 리터럴 배열을 제공합니다. 그러나 리터럴의 진정한 가치는 자신을 만들 때 더욱 분명 해집니다.

UDL (User-Defined Literals)을 사용하여 여러 가지 요구 사항을 해결할 수 있지만 일반적인 코딩 문제없이 데이터 변환을 지원하고 사용자 정의 유형을보다 쉽게 ​​사용할 수 있으며 원하는 부작용을 얻는 것이 일반적입니다.

내장 또는 표준 라이브러리 리터럴은 접두사 및 접미어 형식으로 제공되지만 자체 리터럴을 정의 할 때만 접미사 형식을 만들 수 있습니다. 또한 접미사는 밑줄로 시작해야합니다. 밑줄은 기존 접미어와의 충돌을 방지하고 다른 개발자가 리터럴이 사용자 정의 (비표준) 형식임을 알도록 돕는 데 도움이됩니다.

변환 UDL 개발

UDL 내에 변환을 캡슐화 할 수 있습니다. 이러한 UDL을 작성한 후에해야 할 일은 원하는 결과를 얻기 위해 상수를 정의 할 때 적절한 접미사를 제공하는 것입니다. CustomUDL01 예제는 반경 입력을 상수의 원 영역으로 변경하는 변환을 정의하는 기술을 보여줍니다.

#include using namespace std; constexpr long double 연산자 "_circ (긴 이중 반지름) {반환 반지름 * 반지름 * 3. 141592;} int main () {double x = 5. 0_circ; cout <<"원의 영역은 "<< x << endl; return 0;}

UDL을 생성하기 위해 예제에서는 long double의 반환 값과 long double의 입력 값 인 radius를 사용하는 constexpr을 사용합니다. 원의 면적을 계산하는 방정식 이 예제에서는 constexpr의 일부로 올바른 계산을 수행합니다.

사용자 정의 UDL을 만들 때마다 컴파일러는 변환을 위해 가장 큰 유형을 사용해야합니다. 즉, 부동 소수점 리터럴에 긴 double을 사용해야하고 정수 리터럴에 unsigned long long을 사용해야합니다. 나중에 더 작은 유형을 사용하도록 선택하더라도 예를 들어 x를 double로 선언하면 리터럴 자체에서 가능한 가장 큰 유형을 사용해야합니다.

새 유형의 UDL을 선언하려면 예제에서 x를 생성하고 _circ 접미사를 사용합니다. 결과는 화면에 나타납니다. 이 예제를 실행하면 다음과 같이 올바른 값이 x에 위치하게됩니다.

원의 면적은 78입니다. 5398

사용자 정의 유형 UDL 개발

만남은 이해하기 어렵고 이해하기 어려운 맞춤 유형에 의존합니다.코드를 단순화하기 위해 UDL을 생성하면 더 명확 해지고 오류 가능성이 줄어 듭니다. CustomUDL02 예제에는 UDL을 작성하는 데 사용되는 사용자 정의 유형, 연산자 및 UDL을 사용하여 리터럴을 정의하는 방법이 표시됩니다.

#include using namespace std; struct MyType {MyType (double input): 값 (입력) {} double 값;}; {UDLType = 145. 6_mytype; cout << ulType; value << endl; return 0;}

이렇게하려면 다음을 수행하십시오. 기법을 사용하려면 유형을 구성하는 데 필요한 입력 수를 허용하는 유형의 생성자를 작성해야합니다. 최소한 생성자는 하나의 유형을 허용해야하며 그렇지 않으면 사용자가 입력 한 값이 손실됩니다.

사용자 정의 유형은 연산자에서 요구하는 것과 같은 크기의 데이터 형식을 지원하지 않지만 같은 종류 여야합니다. 예를 들어, long double을 int로 변환 할 수 없습니다.

이 예제를 실행하면 출력이 표시됩니다 값은 사용자 정의 유형에 입력 한 값인 145.6입니다.이 방법을 사용하면 상당히 복잡한 설정을 처리 할 수 ​​있습니다. 사용자 정의 유형의 사용자는 명확한 코드 작성 기능을 사용하여 쉽게 이해하고 해석 할 수 있습니다. 기본 유형은 복잡합니다.

부작용으로 맞춤 UDL 사용

가장 흥미로운 요소 중 하나입니다. UDL의 목적은

부작용

(응용 프로그램을 더 짧고 효율적으로 만들거나 유연성을 높이기 위해 평소 또는 일반 작업 이외의 작업)을 만드는 것입니다. 리터럴을 정의한 결과로 발생하는 특정 작업을 정의하려고합니다. 당신이 얻는 것은 여전히 ​​문자 적이지만, 나중에 사용할 값을 반드시 의미하지는 않는 문자 그대로입니다. CustomUDL03 예제는 비 전통적 용도 중 하나를 보여줍니다. #include using namespace std; int main () {10_countdown; return 0;}

void 연산자 "_countdown (unsigned long long 값) {for (int i = 값; i> = 0; i--) _countdown 연산자는 일반적으로 값과 연결되는 것에 연결되지 않으며 실제로 값을 반환하지는 않습니다. 대신에 얻은 결과는 부작용입니다.이 예제를 실행하면 이 출력을보십시오.

10 9 8 7 6 5 4 3 2 1 0

컴파일러가 10_countdown을 루프의 각 반복마다 하나씩 개별 cout 문으로 대체했습니다. 10과 0 사이의 값을 역순으로 출력하는 11 개의 cout 문 부작용 UDL은 반복적 인 작업을 간소화하여 코드를 작성하는 데 유용한 모든 가능성을 열어줍니다.

C ++로 나만의 UDL을 생성하기

편집자의 선택

Dragon Go! iPhone 및 iPad 용 앱 - 인형

Dragon Go! iPhone 및 iPad 용 앱 - 인형

Dragon Search를 사용하시는 분이라면 Dragon Go를 사용하는 것이 좋습니다! Nuance는 iPhone 3GS, iPhone 5, iPhone 4, iPod touch (3 세대), iPod touch (4 세대) 및 iPad에서 사용할 수 있도록 무료로 다운로드 할 수있는이 앱을 만들었습니다. (iOS 4.0 이상이어야합니다.) Android 기기에서도 사용할 수 있습니다. 드래곤가! ...

드래곤에서 피할 수있는 10 가지 실수 말하기 - 인형

드래곤에서 피할 수있는 10 가지 실수 말하기 - 인형

모두가 실수를 저지르고 어떤 사람들은 정말 크고 재미있게 만든다. 실수. NaturallySpeaking을 사용하여 많은 실수를 저 지르므로 때때로 수시로 일부를 만들 수도 있습니다. 내가 묻는 것은 다음과 같습니다. 내가 미리 짐작했던 10 가지 분명한 실수를하지 마십시오. 원래의 수. 창조적으로 행동하십시오. 거기서 나가서 ...

NaturallySpeaking을위한 10 가지 시간 절약 팁 - 인형

NaturallySpeaking을위한 10 가지 시간 절약 팁 - 인형

때로는 잘하고 그냥 사용하는 것의 차이 새로운 소프트웨어는 더 지혜롭고 경험 많은 스승의 충고 한 부분입니다. 누군가가 당신에게 전에 말했었 으면 좋을 10 가지가 있습니다. 대화 상자의 단축키 사용 대화 상자, 라디오 버튼, 확인란의 다양한 기능 ...

편집자의 선택

Google SketchUp 8에서 새로운 지형 모델을 만드는 법 - Google에서 모델링 할 때 인형

Google SketchUp 8에서 새로운 지형 모델을 만드는 법 - Google에서 모델링 할 때 인형

SketchUp을 사용하면 지형을 만들어야 할 수 있습니다. 건물에 대한 패치를 모델링하든 센트럴 파크를 다시 디자인하든 기존 데이터로 지형을 모델링 할 수 있습니다. 기존 데이터는 일반적으로 등고선 또는 토폴 라인 형태로 도착합니다. 지형지도에서 볼 수있는 삐걱 거리는 선을 알고 있습니다.

SketchUp에서 드레이프로 경로와 도로를 만드는 법 - 스케치 업에서 드레이프 도구

SketchUp에서 드레이프로 경로와 도로를 만드는 법 - 스케치 업에서 드레이프 도구

드레이프 도구가 작동 함 쿠키 커터와 조금 같다. 그것을 사용하여 객체의 가장자리를 직접 그 아래에있는 다른 표면으로 전송합니다. 아마도 당신은 부드럽게 경 사진 지형을 가지고 있으며, 당신은 그것에 사행 경로를 그리기를 원할 것입니다. 경로는 윤곽선을 따라야합니다.

SketchUp 모델을 3D 인쇄 용 부품으로 자르는 방법 - 인형

SketchUp 모델을 3D 인쇄 용 부품으로 자르는 방법 - 인형

SketchUp 모델 자르기 Intersect Faces 도구를 사용하여 그룹을 결합하는 것과 매우 유사합니다. 더 큰 오브젝트와 교차하여 커팅의 새 가장자리가 될 커터로 지오메트리를 사용할 것입니다. 모델이 매우 단순하고 SketchUp을 사용하는 경우 ...

편집자의 선택

Route Prefix를 사용하여 Junos - dummy에서 라우팅 필터를 생성하는 방법

Route Prefix를 사용하여 Junos - dummy에서 라우팅 필터를 생성하는 방법

라우팅 정책은 특정 경로가 라우팅 테이블에 수용되거나 일부 인접 라우터에 보급되는 것을 방지하기위한 것입니다. 경우에 따라 특정 경로 또는 경로 집합을 일치시키는 것이 유용 할 수 있습니다. 이렇게하려면 경로 필터를 사용합니다. 경로 필터는 특정 IP 주소 또는 접두어 범위에서 일치합니다. ...

Junos 라우터에서 COS의 코드 포인트 별명을 사용하는 방법 - 인형

Junos 라우터에서 COS의 코드 포인트 별명을 사용하는 방법 - 인형

전달 수업은 고통 스러울 수 있습니다. 더 좋은 방법은 코드 포인트 별칭을 사용하는 것입니다. CoS (Class of Service) 정책을 결정할 때 비트 패턴을 지정하는 대신 비트 패턴을 나타내는 별칭 이름을 정의 할 수 있습니다. 이러한 별칭을 코드 포인트 별칭이라고합니다. 간단히 말하자면 코드 포인트를 사용하십시오 ...

Junos 라우팅 정보를 요약하는 방법 - 더미

Junos 라우팅 정보를 요약하는 방법 - 더미

때때로 라우팅 정보를 간단하게 요약 할 수 있습니다 라우터. 예를 들어, 네트워크에서 OSPF를 방금 구성 했으므로 라우팅 테이블에 특정 수의 OSPF 경로가 표시 될 것으로 예상됩니다. show route summary 명령을 실행하여 모든 경로를 볼 수 있습니다 ...