簡體   English   中英

使用帶有boost :: units :: quantity值的printf

[英]Using printf with boost::units::quantity values

boost :: units庫提供了一種將數量值寫入流的好方法,例如參見

我可以將printf與數量值一起使用,而不是使用輸出流嗎? 我有相當數量的代碼已使用printf很好地格式化了輸出,我想保留格式。 傳遞數量說

quantity<mass_density> rho = 1.0 * mass_density;
printf("rho %6.2e\n", rho);

發出警告

警告:格式'%e'期望類型為'double'的參數,但是參數2的類型為'boost :: units :: quantity <boost :: units :: unit <boost :: units :: list <boost :: units: :dim <boost :: units :: length_base_dimension,boost :: units :: static_rational <-0x00000000000000003l>>,boost :: units :: list <boost :: units :: dim <boost :: units :: mass_base_dimension,boost: :units :: static_rational <1l>>,boost :: units :: dimensionless_type>>,boost :: units :: homogeneous_system <boost :: units :: list <boost :: units :: si :: meter_base_unit,boost ::單位::列表<boost ::單位:: scaled_base_unit <boost ::單位:: cgs :: gram_base_unit,boost :: units :: scale <10l,boost :: units :: static_rational <3l>>>,boost ::單位::列表<boost ::單位:: si :: second_base_unit,boost :: units :: list <boost :: units :: si :: ampe_base_unit,boost :: units :: list <boost :: units :: si :: kelvin_base_unit,boost :: units :: list <boost :: units :: si :: mole_base_unit,boost :: units :: list <boost :: units :: si :: candela_base_unit,boost :: units :: list < boost :: units :: angle :: radian_base_unit,boost :: units :: list <boost :: units :: angle :: steradian_base_unit,boost :: units :: dimensionless_type>>>>>>>>>>>>'[-Wformat]

我可以只使用rho.value(),但我想盡可能輸出單位(即使我已經更新了格式字符串)。

我認為答案就在這里, http://www.boost.org/doc/libs/1_52_0/doc/html/boost_units/Reference.html#header.boost.units.io_hpp

格式說明符列表由語言固定。 "%e"輸出一個double"%d"輸出一個int等。沒有任何東西可以輸出quantity<mass_density>類型的對象或任何其他類類型的對象。

您可以擁有:

template <typename Unit, typename T>
string symbolic_units(const quantity<Unit, T> &)
{
    return symbol_string(Unit());
}

int main()
{
    quantity<mass_density> x;
    x = 3.72 * kilogram_per_cubic_meter;

    printf ("%g %s\n", x.value(), symbolic_units(x).c_str());
}

但不多。 除非您當然願意使用流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM