问题标签 [template-meta-programming]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Boost MPL 为对象序列化生成代码?
我想为
通过查看 mpl 序列,但我需要能够识别对象并将其检索回来,我不知道如何获取它成员的名称,我必须知道它吗?
代码应该看起来像
我想通过用户只定义一个与对象布局对应的mpl序列来生成上面的代码,是否可行,你能给我一些提示吗?
我的目标是:
用户mpl::vector<String, int, long, char>
为上述对象定义,我metaprogram
可以生成所需的编码。
c++ - boost::mpl::vector - 获取类型的基本偏移量
mpl::vector
在对它执行 a 之后是否有可能获得 a 的偏移量mpl::find<seq,type>
?
换句话说,我想做的编译时间等同于:
如果做不到这一点,我的类型mpl::vector
有一个type_trait<T>::ordinal
const 硬编码,如果可能的话,我想避免这种情况。
重要说明,我也在boost::variant
从向量创建一个,我看到我可以通过执行运行时函数来获得序数variant::which()
。但是,这需要我创建一个具有默认初始化值的虚拟对象。这是相当难看的。如果您知道其他使用变体的方法,那也可以解决我的问题。
c++ - boost-mpl 比较迭代器
天哪,在使用 mpl 库时,弄清语法是一个偶然的经历(上一个问题)。比较两个 mpl 迭代器的正确语法是什么 - 即it != v.end()
test ?
如果我删除断言,仿函数将编译并执行良好。
c++ - 更多精神疯狂 - 解析器类型(规则与 int_parser<>)和元编程技术
问题在底部以粗体显示,问题也通过蒸馏代码片段进行了总结。
我正在尝试将我的类型系统(类型系统从类型到字符串)统一到一个组件中(由 Lakos 定义)。我正在使用boost::array
,boost::variant
和boost::mpl
, 来实现这一点。我希望将我的类型的解析器和生成器规则统一在一个变体中。有一个未定义的类型,一个 int4(见下文)类型和一个 int8 类型。变体读作variant<undefined, int4,int8>
.
int4 特征:
上面的变体一开始是未定义的,然后我初始化了规则。我遇到了一个问题,导致了 50 页的错误,我终于设法找到了它,Variantoperator=
在分配过程中使用,aboost::spirit::qi::int_parser<>
不能分配给另一个 (operator=)。
相比之下,我的未定义类型没有问题:
问题的蒸馏:
具体解析器和规则之间存在语义鸿沟。我的大脑现在在冒烟,所以我不会考虑实用主义,我的问题是,我该如何解决这个问题? 我可以想到三种解决问题的方法。
一:静态函数成员:
我猜方法一会阻止线程安全代码??
二:整体解析器被包裹在一个shared_ptr中。我为打字系统使用 TMP 有两个原因:1 效率,2 将关注点集中到组件中。使用指针打败了第一个原因。
三: operator=被定义为无操作。变体保证lhs
在赋值之前默认构造。
编辑: 我认为选项 3 最有意义(operator= 是无操作)。一旦创建了规则容器,它就不会改变,我只是指定强制一个类型的规则特征进入它的偏移量。
c++ - Creating recursively std::map of std::maps
I would like to know the best way or better ways of doing something like this:
c++ - 提取可变参数模板参数包并在类型特征元函数中的另一个可变参数模板中使用它?
我想确定任何可变参数类模板是否是另一个类的基础。通常我会使用 std::is_base_of,但我认为我的用例不适合,而且我不确定 std 或 boost 中是否已经有东西可以处理这个问题。我希望可变参数基类模板的参数包来自另一个可变参数类模板。这是一些示例代码,希望能解释我想要做什么:
用法:
胆量:
这可能吗?
c++ - 在 C++ 元编程中存储状态?
是否可以在 C++ 元程序中存储状态?我不完全确定我的意思,但我想要一个可以“分配”到的模板类,例如state::value
可以通过使用 C++ 模板进行更改。
我知道我可能听起来很模糊,但我希望有人能理解我在说什么(也请不要使用 Boost.MPL)。
c++ - 参数包模板元编程深度优先搜索
我有一个像这样的参数类:
我有一个参数包类:
parameter_packs
包含多个parameters
和/或parameter_packs
。
我想要一个函数(或方法),如下所示:
parameter
对具有值的第一个进行深度优先遍历KEY
并返回其值。当然,这应该在编译时完成,并且应该具有恒定的运行时。注意KEY
这里只是一个空类,它永远不会被创建或使用。
我希望能够从左侧或右侧执行此操作。
这个想法是您可以拥有一组默认参数,您可以将它们保存到变量中并在将它们传递给函数之前覆盖它们。我不认为 boost::parameter 允许保存(由于对临时对象的引用),而且我相信当你加倍参数时它会出错。
c++ - 如何在 C++ 中将 typedef 用于泛型类
我正在尝试使用 unordered_map。但是在某些服务器中,我们没有 tr1 库。在这些情况下,我想使用地图。所以,我想编写一个头文件,我将在其中使用以下行之一。
我的问题是我在这里使用不同类型的地图。
如果我可以使用 typedef 来别名 map 或 unordered_map 作为 hashmap,那么我可以在代码中使用 map hashmap<string, string>
as hashmap<int, int>
。
有什么办法可以做到这一点,或者如果有更好的方法,请建议我。
谢谢维诺德
c++ - 嵌套在模板类定义中的 C++ 模板类型
我有一个类定义看起来像这样的情况:
我正在使用 gnu g++ 进行编译,编译器抱怨 Alpha 是“不是模板”。
我已经看到在编写 Bravo 的库中使用了相同的技术,并且 Bravo 是一个模板类。我错过了什么吗?我已经将 Alpha 剥离到了骨子里,并在没有编译成功的情况下完成了测试。我还尝试从我在 Bravo 的库中看到这个工作的地方复制+粘贴代码,同样的事情,没有成功,同样的错误。
提前致谢。