gpt4 book ai didi

c++ - 使用可以在多个不同位置定义的函数之类的 C++ 类

转载 作者:可可西里 更新时间:2023-11-01 17:38:32 25 4
gpt4 key购买 nike

在 C++0x、C++03 TR1 和 boost 之间,函数和绑定(bind)等功能可以在 3 个不同的地方定义,具体取决于编译器,例如,对于 VC pre VC9 功能包,你有 boost 版本,然后你得到它们在 std::tr1::命名空间中,而 VC10 将其移至 std::命名空间。

目前我现有的代码在 boost::命名空间中独占地使用旧的 bo​​ost 版本,但是因为对于我的许多应用程序和库,我使用的所有 boost 东西现在都在 tr1 和 C++0x 中,如果可能的话,id 喜欢删除来自这些的增强依赖性,同时保留与旧编译器版本的向后兼容性。

但是我不确定如何让我的代码定位、包含然后能够访问正确的版本 :( 我考虑过的一件事是使用像 _MSC_VER 这样的宏来查看编译器是否包含我想要的类, (回退到 tr1,然后根据需要提升),然后使用“使用 somenamespace::someclass;”将有问题的类移动到 std::命名空间中。

问题是似乎在某些情况下这可能会破坏一些东西,我什至不确定如何判断 VC9 是否安装了它的功能包或 SP1 :( 我也不确定如何使用整洁的方法要做到这一点,或许提供我自己的 functional.hpp 来完成所需的“魔法”?

最主要的是我想开始为新标准编写代码,但在某种程度上它仍然可以在旧编译器上以最小的努力工作。

最佳答案

Boost . TR1已经为你做了这件事——它有编译器/版本检测逻辑来使用你的编译器的 TR1 实现,如果它适用于你的平台,或者使用各种相关的 Boost 库来模拟 TR1,如果不是的话:

This library does not itself implement the TR1 components, rather it's a thin wrapper that will include your standard library's TR1 implementation (if it has one), otherwise it will include the Boost Library equivalents, and import them into namespace std::tr1.

关于c++ - 使用可以在多个不同位置定义的函数之类的 C++ 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5162134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com