2012-12-12 14 views
0
#include <iostream> 
#include <boost/units/quantity.hpp> 
#include <boost/units/systems/si/length.hpp> 

using namespace boost::units; 

struct bu1 : base_unit<bu1, length_dimension, 2001> {}; 
struct bu2 : base_unit<bu2, length_dimension, 2002> {}; 

BOOST_UNITS_DEFINE_CONVERSION_FACTOR(bu1, bu2, double, 1.5); 

#if 1 
BOOST_UNITS_DEFINE_CONVERSION_FACTOR(bu2, bu1, double, 4.0); 
#endif 

int main(int argc, char *argv[]) 
{ 
    quantity<bu1::unit_type> output(1 * bu2::unit_type()); 

    // prints 4 or 0.67 
    std::cout << output.value() << std::endl; 

    return 0; 
} 

該代碼打印40.666667,具體取決於是否定義了第二個轉換因子。這應該是由設計?物理學中沒有兩個這樣的單位需要不同的轉換因子,是嗎?是通過設計還是錯誤進行雙向轉換?

回答

0

這是垃圾進/垃圾出行爲。你知道1.0/1.5!= 4.0,不是嗎?第二個轉換因子,如果你想明確說明,應該是(2.0/3.0),而不是4.

定義的第一個轉換因子規範已經工作過。從the documentation

如果目標單元是基座單元或一個單元,其僅包含其被升高到第一電源(例如feet->米)的反向(meters->腳在這個例子中)一個基本單元不需要明確定義。

有人可以爭辯說,有一種錯誤,它甚至可以讓你指定第二個轉換因子,它與第一個轉換因子不一致。

此外,我希望您在生產代碼中使用< boost/units/io.hpp>,並指定單位的名稱/符號,而不是像output.value()這樣的無量綱打印輸出。我知道這個問題的方式比較短,當然...

相關問題