당신은 몇 가지 새로운 유형을 정의 (또는 위에서 언급 한 바와 같이 부스트 단위를 사용) 할 수
사용자 정의 솔루션과 유사 할 수 있습니다 : 당신은 값에 대한 강력한 형식 정의를 필요 했어
#define DECLARE_UNIT(UnitName) \
struct UnitName { \
UnitName(const long double val) noexcept : val_(val) {};\
long double val_ = 0.0; \
};
DECLARE_UNIT(Joule);
DECLARE_UNIT(Newton);
DECLARE_UNIT(Meters);
const Newton operator""_N(const long double n) noexcept {
return Newton(n);
}
const Meters operator""_m(const long double m) noexcept {
return Meters(m);
}
const Joule operator*(const Newton& newtons, const Meters& meters) noexcept {
return newtons.val_ * meters.val_;
}
int main() {
auto force = 5.0_N;
auto distance = 6.8_m;
auto energy = force * distance; // of Joule type
}
(또는 새로운 유형) 및 오버로드 된 연산자. 리터럴은 특정 유형의 값만 생성하며 구문 설탕을 사용합니다. –
[Boost.Units] (http://www.boost.org/doc/libs/1_56_0/doc/html/boost_units.html)에서 아이디어를 얻을 수 있으며, 기본적으로 사용자 정의 리터럴이 적절한 부스트를 반환하도록 만들 수 있습니다. 단위 유형. – Angew