其想法是,由于可变参数模板是编译时特性,因此 ABI 影响或运行时行为变化将很小。这可能吗?
我特别希望 boost::mpl::vector 和 boost::mpl::string 的编译时间更快。
改写问题...
是否可以通过将 c++03 和 c++11 代码分离到库中来混合它们?即,我们使用了很多与 gcc 4.3 兼容的 3rd 方 c++ 库,但我们也在继续使用 gcc 4.7,并打算在可能/有意义的情况下使用 c++11 功能。还是c++11和c++03不能混用?
其想法是,由于可变参数模板是编译时特性,因此 ABI 影响或运行时行为变化将很小。这可能吗?
我特别希望 boost::mpl::vector 和 boost::mpl::string 的编译时间更快。
改写问题...
是否可以通过将 c++03 和 c++11 代码分离到库中来混合它们?即,我们使用了很多与 gcc 4.3 兼容的 3rd 方 c++ 库,但我们也在继续使用 gcc 4.7,并打算在可能/有意义的情况下使用 c++11 功能。还是c++11和c++03不能混用?
您应该使用在兼容模式下运行的相同工具来编译和链接所有内容。你不能像这样挑选功能。
例如,ABI 的影响来自于标准 I/O 类的增加的虚拟功能表。把东西混在一起是不安全的。
我不能给出一个合格的答案,但据我了解,如果这种向后兼容会被破坏,很多人会担心。据我了解,新的 C++11 中没有任何内容需要重新构建所有内容。因此,只有您的特定编译器才会这样做。对于 GCC,我不期望它,但不同的 libstdc++ 版本可能会产生“问题”。
我的强烈猜测是,在典型的(intel-)linux 上,您应该能够创建两个独立的库,它们具有不同的新版本 gcc(可能 > 4.x)并将它们使用/链接到最终程序中。不过,你可能有两次在那里的一些东西。我在 4.7.0 和<thread>
. 我不知道他们是否会与其他线程库(例如 boost)产生好的或坏的混合。但是,您还不想在生产代码中使用 gcc-4.7.0。在最终的 gcc 编译器出来之前,只有负责项目团队的声明才能给你确定性。