Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 限制boost::options\u描述中默认值std::cout的精度_C++_Precision_Cout_Boost Program Options - Fatal编程技术网

C++ 限制boost::options\u描述中默认值std::cout的精度

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.

当我构建一个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.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))