boost::MPL 和 boost::fusion 之间的区别

发布于 2024-11-17 01:58:01 字数 996 浏览 4 评论 0原文

我是 boost::fusion 和 boost::mpl 库的新手。谁能告诉我这两个库之间的主要区别?

到目前为止,我只使用 fusion::vector 和其他一些简单的东西。现在我想使用 fusion::map 或 MPL::map 但我不知道如何选择合适的。

我需要将简单类型映射到复杂类型(alisa 类型)。目前我有以下片段,两者都完全符合我的需要。

boost::fusion:

typedef boost::fusion::map<
    boost::fusion::pair<AliasNames::test1,int>,
    boost::fusion::pair<AliasNames::test2,double>,
    boost::fusion::pair<AliasNames::test3,float>
> TmapAssociations1;

typedef boost::fusion::result_of::value_at_key<TmapAssociations,AliasNames::test1>::type t;

boost::MPL:

typedef boost::mpl::map<
    boost::mpl::pair<AliasNames::test1,int>,
    boost::mpl::pair<AliasNames::test2,double>,
    boost::mpl::pair<AliasNames::test3,float>
> TmapAssociations2;

boost::mpl::at<TmapAssociations2,AliasNames::test1>::type t2;

MPL 和 fusion 有什么区别吗?是否存在某个库优于另一个库的情况?

感谢您的回复。

I'm new to boost::fusion and boost::mpl libraries. Could anyone please tell me the main difference between these two libraries?

Until now I used only fusion::vector and few other simple things. Now I want to use fusion::map or MPL::map but I don't know how to choose the right one.

I need map simple type to complicated type (type alisa). Currently I have following snippets and both works exactly I need to.

boost::fusion:

typedef boost::fusion::map<
    boost::fusion::pair<AliasNames::test1,int>,
    boost::fusion::pair<AliasNames::test2,double>,
    boost::fusion::pair<AliasNames::test3,float>
> TmapAssociations1;

typedef boost::fusion::result_of::value_at_key<TmapAssociations,AliasNames::test1>::type t;

boost::MPL:

typedef boost::mpl::map<
    boost::mpl::pair<AliasNames::test1,int>,
    boost::mpl::pair<AliasNames::test2,double>,
    boost::mpl::pair<AliasNames::test3,float>
> TmapAssociations2;

boost::mpl::at<TmapAssociations2,AliasNames::test1>::type t2;

Is there any difference between MPL and fusion? Are there any scenarios where one library is preferred over another one?

Thanks for reply.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

帅的被狗咬 2024-11-24 01:58:01

来自 Fusion 简介 (两者中较新的一个):

STL 容器基于值工作。 MPL 容器适用于类型。融合容器适用于类型和值。

在进行纯类型计算时,选择 MPL 而不是融合。静态类型计算完成后,您可以为运行时部分实例化融合序列(请参阅转换)。

在你的例子中,任何一种方法都有效。如果您有更复杂的需求,也许 Fusion 会为您做一些额外的事情(在运行时)。但就目前情况而言,我会坚持使用 MPL。

From the introduction of Fusion (the newer of the two):

STL containers work on values. MPL containers work on types. Fusion containers work on both types and values.

Choose MPL over fusion when doing pure type calculations. Once the static type calculation is finished, you can instantiate a fusion sequence (see Conversion) for the runtime part.

In your example, either way works. If you had more complex needs, maybe Fusion would do something extra for you (at runtime). But as it stands, I'd stick with MPL.

吃不饱 2024-11-24 01:58:01

Boost.Fusion 可以弥合编译时数据结构与其运行时实例之间的差距。它基本上是一个具有丰富语义的元组数据结构库以及相关算法。

Boost.Fusion is there to bridge the gap between compile-time data structures and their runtime instances. It is basically a library of semantic-rich tuple-like data structures with associated algorithms.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文