- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
--edit -- 解决了问题:对最后一个旁注的评论会很有帮助。对 phoenix::bind 重载处理的评论也会有所帮助(在我的回答中)。
我在一个具有严格类型要求的系统上工作,我想确保我正在解析满足 int32_t 和 int64_t 约束的整数,我不希望解析器将解析的字符串合成并约束为上述类型.
我该怎么做? document提到long_long
仅在支持 64 位的平台上可用,但我也需要在 32 位平台上解析 int64_t。
我的解析器摘录如下:
...
eps(_b == VALUE_INT4) >> qi::long_
[phoenix::bind(&AddEntry, _r1,_a, _1, _pass)] ) //
| ( eps(_b == VALUE_INT8) >> qi::long_long)
...
AddEntry 有一个 int32_t
过载和一个int64_t
过载,是一个 phoenix::static_cast_在 _1
为了 ?如果是这种情况,我如何在现代 32 位平台上解析 64 位整数?我假设 BOOST_HAS_LONG_LONG
仅在 8008 等陈旧硬件上未定义;) .
<Rant>
我希望他们坚持 c99 和 <boost/cstdint.hpp>
中规定的标准,我们大多数人都希望针对干净的抽象进行编程。数字解析器的定义方式可能有充分的理由。但是,可以在文档中更好地定义宏大计划的使用。 </Rant>
旁注:上面的条件 epsilon 样式在性能上是否与 case 语句相媲美?
最佳答案
1) Qi 解析器已经检查溢出条件。如果输入不能用组件应该匹配的类型表示,解析器组件将失败。例如,int_parser<int32_t, 10>
对于不适合带符号的 32 位整数的数字将失败。
您可以使用 long_long
解析器(即预定义的 64 位整数解析器)仅当 BOOST_HAS_LONG_LONG
时被定义为。如果您的平台不是这种情况,您仍然可以通过编写自己的包装器类型来模拟 64 位整数,以公开 Qi 数字解析器所期望的功能(参见 here),例如:
struct my_64bit_int {
//...
};
typedef int_parser<my_64bit_int, 10> my_64bit_int_parser_type;
my_64bit_int_parser_type const my_64bit_int_parser;
并将其用作:
my_64bit_int bigint;
parse(b, e, my_64bit_int_parser, bigint);
2) 你不能在不帮助编译器的情况下绑定(bind)重载函数,即给定:
void AddEntry(int32_t);
void AddEntry(int64_t);
如果你想为 int32_t
绑定(bind),你需要显式转换函数指针:
phoenix::bind((void(*)(int32_t))&AddEntry, _1);
对旁注的回答:否。备选解析器始终按照指定的相同顺序依次执行不同的备选方案,并在第一个匹配时停止。它的整体复杂度是O(N)
, 其中N
是单独备选方案的数量(参见 here )。
关于c++ - 提升精神数字解析器并获得所需的综合属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5566192/
这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: ?
我收到警告: One or more signals are missing in the sensitivity list of always block. always@(Address)begi
我正在寻找一个完整的 java 日期管理库,它可以让我理解像这样的字符串: 明天中午 => 2011-10-20 12:00 今天下午 4 点 => 2011-10-20 16:00 等... 但如果
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 7年前关闭。 Improve this questi
下学期我可能会成为我大学网络编程类(class)教学团队的一员,我想知道要给学生布置什么样的 Javascript 作业。从编程的 Angular 来看,本类(class)不是入门类(class)。
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说
我将我的 Gitlab 迁移到了新域。我想将所有 HTTP 请求从旧 URL 重定向到新 URL。两个域当前都指向同一服务器(使用 A DNS 记录)。 我使用 Gitlab Omnibus 包,并捆
只需在新配置的 CentOS 6.5 VM 上使用 omnibus 安装程序设置新的 Gitlab 安装。我有点 Linux 菜鸟,但我一直在尝试设置 Gitlab 安装,并且能够通过主机访问安装。
我试图更好地了解合成如何在没有指定其他条件的过程中工作。 我认为这不是编码方式,因为我没有考虑其他选项,但我的问题是如何解释这段代码? process(clock) begin if (clock'e
创建以下内容时: create view v (a, b) as select 1, 2 from dual; create or replace package p as type t is t
我是一名优秀的程序员,十分优秀!