- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我花了一天的时间阅读笔记并观看有关 boost::fusion 的视频,但我真的不了解它的某些方面。
例如,boost::fusion::has_key<S>
功能。在 boost::fusion 中有这个的目的是什么?我们只是尝试将尽可能多的编程移动到编译时发生的想法吗?几乎所有 boost::fusion
函数与运行时版本相同,只是它现在在编译时求值? (我们假设在编译时做更多的事情是好的?)。
与 boost::fusion 相关,我也有点困惑为什么元函数总是返回类型。这是为什么?
最佳答案
另一种看待 boost::fusion 的方式是将其视为“穷人自省(introspection)”库。 boost::fusion 的最初动机来自 boost::spirit 解析器/生成器框架的方向,特别是需要支持所谓的“解析器属性”。
想象一下,您有一个要解析的 CSV 字符串:
aaaa, 1.1
这个字符串解析成的类型可以描述为“字符串和 double 元组”。我们可以使用老式结构( struct { string a; double b; }
或更新的 tuple<string, double>
)在“普通”C++ 中定义此类元组。我们唯一缺少的是某种适配器,它将允许将任意组合的元组(和一些其他类型)传递给统一的解析器接口(interface),并期望它在不传递任何带外信息(例如字符串)的情况下理解它scanf 使用的解析模板)。
这就是 boost::fusion 发挥作用的地方。构建“fusion 序列”最直接的方法是采用普通结构:
struct a {
string s;
double d;
};
BOOST_FUSION_ADAPT_STRUCT(a, (string, s)(double, d))
“ADAPT_STRUCT”宏为解析器框架(在本例中)添加了必要的信息,以便能够“迭代”struct a
的成员。调整以下问题:
我刚刚解析了一个字符串。我可以将它分配给 struct a
的第一个成员吗? ?
我刚刚解析了一个 double 值。我可以将它分配给 struct a
的第二个成员吗? ?
struct a
中还有其他成员吗?还是应该停止解析?
显然,这个基本示例可以进一步扩展(并且 boost::fusion 提供了能力)以解决更复杂的情况:
变体 - 假设解析器可能遇到 sting 或 double,并希望将其分配给 struct a
的正确成员. BOOST_FUSION_ADAPT_ASSOC_STRUCT
来拯救(现在我们的解析器可以问这样的问题:“struct a
的哪个成员是 double 类型?”)。
转换 - 我们的解析器可以设计为接受某些类型作为参数,但程序的其余部分已经发生了很大变化。然而, fusion 元函数可以方便地用于使新类型适应旧现实(反之亦然)。
其余的 boost::fusion 功能自然遵循上述基础知识。当需要将“松散 IO 数据”(在任一方向上)转换为 C++ 程序运行的强类型/结构化数据时(如果关注效率), fusion 真正发挥作用。这是 spirit::qi 和 spirit::karma 成为如此高效(可能是最快的)I/O 框架背后的促成因素。
关于c++ - boost::fusion 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20646114/
我正致力于通过 OAuth 合并外部 API,但对 expires_in 属性的用途有点迷惑。通过阅读,应该对 api token 的使用进行防御性编码,因为您应该预料到 token 在任何时候都可能
有人可以概述或总结一下 Spring 框架上下文中 bean 的用途吗? 我了解标准的 Java bean(没有 arg 构造函数、getter/setter,通常是序列化的),但 Spring be
使用 OpenGL 4.1 和 ARB_separate_shader_objects,我们能够在着色器程序中存储着色管道的不同阶段。众所周知,要使用这些,我们需要将它们附加到程序管道对象,然后绑定(
正如我从文档中了解到的那样,“MoveIteratorFactory”的目的是生成每一步都需要执行的 Action 。 “getSize”方法的移动子集有多大? “createOriginalMove
请解释 CMakeLists.txt 中这一行的目的是什么: 包括(InstallRequiredSystemLibraries) 我在 CMake 示例中看到这一行,但找不到好的解释,为什么我需要它
这里是新手。我仍在尝试理解在多个布局中运行单个进程或目的的概念。 例如,我想在我的申请中添加“提交后”功能。有一个包含标题、内容等文本框的主布局,以及一个链接到另一个布局以选择类别的按钮。我的问题是,
我在看 Box Oauth2.0 View Controller : https://github.com/box/box-ios-sdk-v2/blob/master/BoxSDK/OAuth2/B
我编写了一个将字符串复制到系统剪贴板的 Java 应用程序。构造函数使用 Clipboard.setContents(Transferable contents, ClipboardOwner own
阅读此文后:http://sourcemaking.com/design_patterns/command 我还是不太明白为什么我们需要这个。 最佳答案 想法是,如果命令被封装为对象,那么这些命令可以
我知道 c++ 中的模板是做什么的,但是今天我看到了一些奇怪的代码: template <> void swap(foo &a, foo &b) { a.name = b.name; a.
我不太明白 C# Collections 中 IEnumerator 的用途是什么。它的用途是什么,为什么要使用它? 我试着在线查看 http://msdn.microsoft.com/en-us/l
不幸的是,我今天做了一些代码考古(同时重构了一些旧的危险代码)并发现了这样的小化石: # line 7 "foo.y" 能在里面找到如此古老的宝藏,我完全惊呆了。我在 C 编程的网站上阅读了它。然而,
您能否澄清一下此注释的实际用途? - 如果我们没有使用数据库中的 SQL 表定义定义相应的约束,会发生什么情况。当我们尝试插入时,hibernate 会检查唯一性吗?或者这就是DB的目的吗?如果 hi
我在视频教程中看到过这段代码: const navToggle = ["Menu"].join(""); $(".site-header").prepend(navToggle); 我明白它的基本作用
我想知道这个成员函数的 scroll_to(TextBuffer::iterator& iter, double within_margin = 0)参数 within_margin。 API 是这样
我想知道是否可以将子目录提交到目录例如,假设您有 site.com/directory 可以将子目录提交到目录。我即将开始为希望她的网站在搜索引擎中排名靠前的客户进行一些搜索引擎优化。我知道实现此目的
STL 迭代器的用途是什么?为什么程序员要创造这个概念? 最佳答案 迭代器允许您将算法与容器分开。只要您有开始和结束迭代器,并且知道迭代器的功能(随机访问等),您就可以在迭代器指定的范围内进行操作。例
NSData *responseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:&respons
我正在编写代码,使用通用的 linux i2c 驱动程序 linux/i2c-dev.h 实现一个简单的 i2c 读/写功能 我对 ioctl 感到困惑:I2C_SLAVE 内核文档说明如下: You
在尝试克隆可变集合时,我最初的方法是对 mutable.Cloneable 特征使用 clone() 方法。但是,这取决于创建引用副本的 java.Object.clone 实现,而不是深拷贝。通过测
我是一名优秀的程序员,十分优秀!