C++ 限制boost::options\u描述中默认值std::cout的精度
当我构建一个boost::options\u描述实例时C++ 限制boost::options\u描述中默认值std::cout的精度,c++,precision,cout,boost-program-options,C++,Precision,Cout,Boost Program Options,当我构建一个boost::options\u描述实例时 options.add_options() ("double_val", value(&config.my_double)->default_value(0.2), "it's a double"); 然后,我想自动输出我的程序可用的选项,并将 std::cout << options << std::endl; 不幸的是,之前对std::cout.precision的调用没有帮助: cout.
options.add_options()
("double_val", value(&config.my_double)->default_value(0.2), "it's a double");
然后,我想自动输出我的程序可用的选项,并将
std::cout << options << std::endl;
不幸的是,之前对std::cout.precision的调用没有帮助:
cout.precision(5);
std::cout << options << std::endl;
计算精度(5);
std::cout来自boost/program\u options/value\u semantic.hpp
:
/** Specifies default value, which will be used
if none is explicitly specified. The type 'T' should
provide operator<< for ostream.
*/
typed_value* default_value(const T& v)
{
m_default_value = boost::any(v);
m_default_value_as_text = boost::lexical_cast<std::string>(v);
return this;
}
/** Specifies default value, which will be used
if none is explicitly specified. Unlike the above overload,
the type 'T' need not provide operator<< for ostream,
but textual representation of default value must be provided
by the user.
*/
typed_value* default_value(const T& v, const std::string& textual)
{
m_default_value = boost::any(v);
m_default_value_as_text = textual;
return this;
}
实现相同功能的更“进取”的方法是实现您自己的类型,该类型将包装double
,用于config.my_double
,并提供从double
的构造和强制,以及您自己的ostream&operator,以避免手动引用:
#define QUOTE(x) #x
#define stringize(x) QUOTE(x)
#define MY_DOUBLE_DEFAULT 0.2
value(&config.my_double)->default_value(MY_DOUBLE_DEFAULT, stringize(MY_DOUBLE_DEFAULT))
value(&config.my_double)->default_value(0.2, "0.2")
#define QUOTE(x) #x
#define stringize(x) QUOTE(x)
#define MY_DOUBLE_DEFAULT 0.2
value(&config.my_double)->default_value(MY_DOUBLE_DEFAULT, stringize(MY_DOUBLE_DEFAULT))