繁体   English   中英

为什么boost包含两个不同版本的strong_typedef.hpp?

[英]Why does boost include two different versions of strong_typedef.hpp?

在我最近建立一个项目时,我注意到有一个关于重新定义的BOOST_STRONG_TYPEDEF宏的编译器警告(转向错误)。 经过进一步调查,我注意到strong_typedef.hpp包含两个不同版本的strong_typedef.hpp :一个位于顶层,一个位于serialization/

两个版本之间实际上也存在差异,而不仅仅是宏的重复版本。 顶级版本没有显式值 - 初始化它的T而序列化版本执行:

代码剪辑:

boost/strong_typedef.hpp

    T t;                                                        \
    explicit D(const T t_) : t(t_) {};                          \
    D(){};                                                      \
    D(const D & t_) : t(t_.t){}                                 \

boost/serialization/strong_typedef.hpp

    T t;                                                        \
    explicit D(const T t_) : t(t_) {};                          \
    D(): t() {};                                                \
    D(const D & t_) : t(t_.t){}                                 \

为什么有两个不同版本的宏,哪一个作为实现更有意义? 将强制内置类型初始化的那个,或者不强制内置类型的那个(尽可能地模仿基础类型强类型化)?

我是boost/strong_typedef.hpp两个版本的作者。

由于强烈反对直接包含在boost基本标题中,我转移到了序列化库。 为了保持向后兼容性,我把它留在了boost base头目录中。 我忘了将此文件合并到发布分支中,因此会出现警告。 我也忘了将名称更改为BOOST_SERIALIZATION_STRONG_TYPEDEF 从那时起,我将初始化添加到基类。 我想自从我进行了拆分后,我在序列化库中包含了版本修正。

我只是查看了序列化库,现在使用strong_typedef是最小的。 我想我会彻底解决它。 那么它就会完全消失。

它应该是一个单独的实用程序。 但我无法真正处理所需的所有提升(测试,文档,构建,审查)。 并且boost对于这些小型头文件实用程序没有一个非常好的位置。 有一天,我希望序列化库所需的这些小工具将迁移到boost基础。 但是我开始对这个想法感到气馁。

看起来boost/strong_typedef.hpp目录是一个历史工件。

缺少t成员的显式初始化是几年前在svn修订版71183中修复的boost/serialization/strong_typedef.hpp的错误 。请参阅错误标记。

在Boost的Subversion主干中, boost/strong_typedef.hpp是一个很空的文件,它说:

#error "This header is deprecated. Please use: boost/serialization/strong_typedef.hpp"

这个变化,r48575,是在2008年制作的 - 我不知道为什么它从未被合并到一个版本中。 也许是因为它会在没有很大好处的情况下打破用户,或者可能是一种疏忽。 同样的变化(r48575)是在trunk中创建boost/serialization/strong_typedef.hpp的。

如果他们不想破坏现有用户,那么被弃用的文件可能只包含boost/serialization的文件,因此只有一个规范的实现。 在任何情况下,似乎如果你可以避免使用boost/strong_typedef.hpp使用serialization中的那个,这就是我的建议。

作为旁注,请记住,一年前Boost Serialization(和strong_typedef.hpp )的作者Bob Ramey 在另一个关于strong_typedef.hpp 错误票据中发表了评论 ,您可能会感兴趣:

我认为序列化库不再使用它了。 当然它还在那里。 我不知道是否有人使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM