Boost.Spirit.Karma 设置精度
Boost.Spirit.Karma set precision
我开始使用 Karma 生成功能通过类似 sprintf 的功能将 double 转换为 char。
为此,我使用以下示例:
template <typename T>
class double3_policy : public boost::spirit::karma::real_policies<T>
{
public:
template <typename T>
static unsigned int precision(T)
{
return 3;
}
};
typedef boost::spirit::karma::real_generator<double, double3_policy<double> > double3_type;
double3_type const double3 ;
using boost::spirit::karma::left_align;
using boost::spirit::karma::generate;
char *p = buffer;
generate(p, '[' << left_align(14)[double3] << left_align(14)[double3] << ']', 12345.000, 22/7.0);
*p = '[=11=]';
该示例工作正常,但精度方法是静态的,我不知道如何动态设置该值。我想为每次使用指定精度,并在执行时更改它。我不介意在开始时创建所有生成器,因为我想要定义的精度数。
问题是我认为我不必为每个精度数字创建一个 class,因为它们之间的唯一区别是返回数字。我尝试用成员方法编译 class(如果这是一个对我来说足够的成员精度方法),我认为我被困在这个 class 方法问题上。
如何创建具有不同精度的生成器对象并仅使用它们而不创建多个 class?如果我可以只使用一个生成器,只需更改 属性 就更好了。
如果有人遇到同样的问题并且可以分享解决方案将会非常有帮助。
谢谢,
Karma 生成器都是关于使用(编译时!)表达式模板指定语法,例如 embedded DSL。
这确实使其不适用于动态格式规范。
我建议使用
- printf
- Boost 格式("safe printf" 具有更多功能)
- 快速格式 (http://www.fastformat.org/)
我能看到这与 Karma 一起工作的唯一方法是为真实打印创建一个自定义指令,它将精度作为一个额外的参数。这不值得(而且它会扼杀你在这里使用 Karma 的唯一好处:性能)。
我开始使用 Karma 生成功能通过类似 sprintf 的功能将 double 转换为 char。 为此,我使用以下示例:
template <typename T>
class double3_policy : public boost::spirit::karma::real_policies<T>
{
public:
template <typename T>
static unsigned int precision(T)
{
return 3;
}
};
typedef boost::spirit::karma::real_generator<double, double3_policy<double> > double3_type;
double3_type const double3 ;
using boost::spirit::karma::left_align;
using boost::spirit::karma::generate;
char *p = buffer;
generate(p, '[' << left_align(14)[double3] << left_align(14)[double3] << ']', 12345.000, 22/7.0);
*p = '[=11=]';
该示例工作正常,但精度方法是静态的,我不知道如何动态设置该值。我想为每次使用指定精度,并在执行时更改它。我不介意在开始时创建所有生成器,因为我想要定义的精度数。
问题是我认为我不必为每个精度数字创建一个 class,因为它们之间的唯一区别是返回数字。我尝试用成员方法编译 class(如果这是一个对我来说足够的成员精度方法),我认为我被困在这个 class 方法问题上。
如何创建具有不同精度的生成器对象并仅使用它们而不创建多个 class?如果我可以只使用一个生成器,只需更改 属性 就更好了。
如果有人遇到同样的问题并且可以分享解决方案将会非常有帮助。
谢谢,
Karma 生成器都是关于使用(编译时!)表达式模板指定语法,例如 embedded DSL。
这确实使其不适用于动态格式规范。
我建议使用
- printf
- Boost 格式("safe printf" 具有更多功能)
- 快速格式 (http://www.fastformat.org/)
我能看到这与 Karma 一起工作的唯一方法是为真实打印创建一个自定义指令,它将精度作为一个额外的参数。这不值得(而且它会扼杀你在这里使用 Karma 的唯一好处:性能)。