Tôi đang thực hiện một số lượng lớn lập trình khoa học và thực hiện các trải nghiệm rất tốt với cả Boost.Units, cung cấp phân tích chiều thời gian biên dịch cho số lượng (tức là số lượng thẻ với đơn vị và do đó bắt được nhiều lỗi với phân tích kích thước vật lý cổ điển) và sử dụng Eigen 2 cho đại số tuyến tính. Tuy nhiên, Eigen không có khái niệm về đơn vị, và trong khi bạn có thể thiết lập đại lượng vô hướng trong ma trận cho Eigen, thì phép nhân của hai đại lượng tạo ra cùng một loại, rõ ràng là không đúng đối với các đơn vị. Ví dụ: mã như:Kết hợp thư viện đại số tuyến tính với Boost :: Đơn vị
using boost::units::quantity;
namespace si = boost::units::si;
Eigen::Matrix< quantity<si::length>, 2, 1 > meter_vector;
quantity<si::area> norm = meter_vector.squaredNorm();
không hoạt động, mặc dù chính xác về mặt logic.
Có thư viện ma trận nào hỗ trợ các đơn vị không? Tôi biết rằng điều này sẽ rất khó thực hiện trong quá khứ, và C++ 11 và decltype
sẽ làm cho điều đó dễ dàng hơn nhiều, nhưng chắc chắn là có thể với C++ 03 và các chuyên môn về mẫu.
Vì lý do này, vì tôi phải tự tìm kiếm một chút: [Hướng dẫn sử dụng blitz 3.7.1] (http://www.oonumerics.org/blitz/docs/blitz_3.html#SEC90) cho bạn biết cách quảng bá người dùng các loại được xác định. Cảm ơn gợi ý. – thiton