2011-10-03 16 views
9

Tôi hiện đang sử dụng tăng :: đơn vị để đại diện cho mô-men xoắn trong các đơn vị si, tuy nhiên tôi cho mô-men xoắn ở feet pound. Tôi đang cố gắng để tạo ra một đơn vị mô-men xoắn pound_foot và một chuyển đổi để hỗ trợ điều này. nỗ lực lười biếng của tôi là chỉ cần xác định:Làm thế nào để thêm đơn vị cơ bản của riêng bạn và chuyển đổi bằng cách sử dụng tăng :: đơn vị

BOOST_STATIC_CONST(boost::si::torque, pound_feet = 1.3558179483314 * si::newton_meters); 

Và sau đó làm:

boost::si::torque torque = some_value * pound_feet; 

Nhưng điều này cảm thấy không đạt yêu cầu. Nỗ lực thứ hai của tôi là cố gắng xác định một đơn vị cơ bản mới gọi là pound_foot (xem bên dưới). Nhưng khi tôi cố gắng sử dụng nó theo cách tương tự như trên (với một dàn diễn viên cho đơn vị si) tôi nhận được một trang đầy lỗi. Bất kỳ đề xuất về cách tiếp cận chính xác?

namespace us { 
    struct pound_foot_base_unit : base_unit<pound_foot_base_unit, torque_dimension> { }; 
    typedef units::make_system< 
      pound_foot_base_unit>::type us_system; 
    typedef unit<torque_dimension, us_system> torque; 
    BOOST_UNITS_STATIC_CONSTANT(pound_foot, torque); 
    BOOST_UNITS_STATIC_CONSTANT(pound_feet, torque);   
} 
BOOST_UNITS_DEFINE_CONVERSION_FACTOR(us::torque, 
            boost::units::si::torque, 
            double, 1.3558179483314); 

Trả lời

6

Pound chân là không thực sự là một đơn vị cơ sở, vì vậy tốt hơn đi với cách sạch và xác định nó trong điều kiện của các đơn vị cơ sở, đó là bàn chân và bảng:

#include <boost/units/base_units/us/pound_force.hpp> 
#include <boost/units/base_units/us/foot.hpp> 
#include <boost/units/systems/si/torque.hpp> 
#include <boost/units/quantity.hpp> 
#include <boost/units/io.hpp> 
#include <iostream> 

namespace boost { 
namespace units { 
namespace us { 

typedef make_system< foot_base_unit, pound_force_base_unit >::type system; 
typedef unit< torque_dimension, system > torque; 

BOOST_UNITS_STATIC_CONSTANT(pound_feet,torque); 

} 
} 
} 

using namespace boost::units; 

int main() { 
    quantity<us::torque> colonial_measurement(1.0 * us::pound_feet); 
    std::cerr << quantity<si::torque>(colonial_measurement) << std::endl; 
    return 0; 
} 

chương trình này tính các yếu tố chuyển đổi từ các giá trị được biết đến của bàn chân và pound, đầu ra là 1.35582 m^2 kg s^-2 rad^-1. Xin vui lòng cho phép tôi dù sao để chế nhạo sự thấp kém của hệ thống hoàng gia.

+0

Hoạt động như một sự quyến rũ - cảm ơn. –

Các vấn đề liên quan