$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
From: Justin Findlay (findlay_at_[hidden])
Date: 2004-08-30 12:43:29
I've got some code that uses the format library to format output, not out of necessity, but rather out of a wanton enjoyment derived from using the syntax, having lately (relatively) discovered boost, prefering the boost::format simple syntax to the posix printf and std::ostringstream flavored solutions.  The "problem" I have is that for the output of every double, I have to specify the precision:
int main()
{
  cout << setprecision(18);
  cout << format("Bunner  p' air: %1% torr\t\tN$_2$: %2% torr\n"
                 "         C air: %3%\t\tN$_2$: %4%")
                 % group(setprecision(18), bunner::air::pp_av)
                 % group(setprecision(18), bunner::N2::pp_av)
                 % group(setprecision(18), bunner::air::c_av)
                 % group(setprecision(18), bunner::N2::c_av) << endl;
  //...
  return 0;
}
Is there a graceful solution, or am I using this library beyond what it was intended for?  Something like the following naturally suggests itself, but I don't think it is standard compliant: the constructor doesn't seem to like using a static object, actually the linker couldn't find the 'prmanip' object.
class Fmt
{
public:
  Fmt()
  {
    cout << "duh" << endl << prmanip << constants::pi << endl;
  }
  static std::_Setprecision setpr(const int&pr)
  {
    prmanip = std::setprecision(pr);
    return std::setprecision(pr);
  }
  static std::_Setprecision prmanip;
};
int main()
{
  cout << setprecision(18);
  Fmt::setpr(18);
  //...
Justin