다음은 간략하게하기 위해 네임 스페이스를 무시합니다. duration
은 네임 스페이스 std::chrono
이고 ratio
은 네임 스페이스 std
입니다.
ratio
이 산술을 직접 수행하지 않고도 최저 조건으로 감소되도록하는 두 가지 좋은 방법이 있습니다. 첫 번째는 매우 직접적 :
그냥 바로 microfortnights
로 이동하려면,하지만 86,400 * 14/1,000,000의 감소 비율이 625분의 756 것을 파악하지 않고 직접 수립, 다만 ratio
후 ::type
를 추가
가
using microfortnights = duration<long, ratio<86400*14, 1000000>::type>;
모든 ratio<N, D>
의 중첩이 type
Nr/Dr
가 감소하는 다른 분획 012,337,292,626,158이다 ratio<Nr, Dr>
. N/D
이 이미 감소 된 경우 ratio<N, D>::type
은 ratio<N, D>
과 동일한 유형입니다.사실, 내가 쓴 수, 이미 625분의 756 올바른 감소 부분을 것을 파악했다, 그러나 더 감소 될 수 있습니다 생각에 단지 편집증 :
using microfortnights = duration<long, ratio<756, 625>::type>;
을 그래서 당신은 의심이있는 경우 귀하를 ratio
은 가장 낮은 용어로 표시되거나 확인하는 데 신경 쓰고 싶지 않으므로 ratio
유형에 항상 ::type
을 추가 할 수 있습니다.
사용자 정의 지속 시간 단위는 종종 가족의 한 부분으로 팝업 용장 배합. 그리고 전체 패밀리를 코드에 사용할 수있는 것이 편리합니다. 예를 들어 microfortnights
은 fortnights
과 분명히 관련이 있으며, hours
(또는 원하는 경우 seconds
)에서 파생 된 days
에서 파생 된 weeks
과 관련이 있습니다.
한 번에 한 단위 씩 가족을 구성하면 가족 전체를 사용할 수있을뿐만 아니라 가장 단순한 변환으로 한 가족 구성원을 다른 가족 구성원과 연관시킴으로써 오류의 가능성을 줄일 수 있습니다. 또한 리터럴을 곱하는 대신 std::ratio_multiply
및 std::ratio_divide
을 사용하면 ratio
을 최하위 용어로 유지할 수 있도록 모든 문자를 ::type
에 유지할 필요가 없습니다. 예를 들어
:
using days = duration<long, ratio_multiply<hours::period, ratio<24>>>;
ratio_multiply
이미 최저 조건으로 감소 승산 결과에 의 typedef 이름이다.
using days = duration<long, ratio<86400>>;
당신은 심지어 같은 번역 단위에서 모두 정의 할 수 있습니다, 당신은 재 정의 오류가 발생하지 않습니다 따라서 위는 동일한 유형입니다. 어떤 경우에도 당신은 지금 말할 수있다 :
using weeks = duration<long, ratio_multiply<days::period, ratio<7>>>;
using fortnights = duration<long, ratio_multiply<weeks::period, ratio<2>>>;
using microfortnights = duration<long, ratio_multiply<fortnights::period, micro>>;
그리고 우리는 우리의 직접 배합에서와 동일한 유형입니다 microfortnights
에 대한 형식 정의 이름으로 결국,하지만 훨씬 간단 일련의를 통해 한 전환 수. 우리는 분수를 최하위 용어로 줄이기 위해 고민 할 필요가 없습니다. 이제는 단 하나가 아닌 여러 유용한 단위가 있습니다.
std::ratio<1, 1000000>
대신 std::micro
을 사용합니다. 이것은 부주의 한 오류를 피할 수있는 또 다른 장소입니다. 실수를 잘못 입력하고 잘못 읽는 것은 (적어도 나를 위해) 쉽습니다.
대신 질문 제목을'std :: ratio'에 대해 바꾸려면 괜찮습니까? 가장 중요한 주제는 선택된 예를 제외하고는 '크로노'와 거의 관련이없는 것처럼 보입니다. – sehe
좋은 지적이 있습니다. 그러나 나는 '지속 기간'에 초점을 맞추기를 원한다. 그렇지 않으면 관객이 '비율'의 실제 적용을 보지 못할까봐 두려워한다. 제목에 '비율'을 추가하여 '비율'을 검색하면이 Q/A를보다 쉽게 찾을 수 있습니다. –
Hehe. +1 세트. (아이러니하게도, 이것이 실제로는 알 수없는 _microfortnight_ "오른쪽"을 만드는 것보다 실제로 더 관련이 있음을 알기까지는 시간이 걸렸습니다.) – sehe