【问题标题】:How to restore auto_ptr in Visual Studio C++17如何在 Visual Studio C++17 中恢复 auto_ptr
【发布时间】:2018-02-20 09:59:24
【问题描述】:

此博客页面提到 Visual Studio 删除了一些 std 功能:

https://blogs.msdn.microsoft.com/vcblog/2017/12/08/c17-feature-removals-and-deprecations/

我有一个项目使用一些现在使用 C++17 功能的 C++ 库。该项目还使用第三方库 websocketpp (https://github.com/zaphoyd/websocketpp),它仍然使用一些现已删除的功能。例如 auto_ptr 和 binary_function。我收到编译器错误,它们不是“std”的成员。

上面的博客提到可以使用细粒度控制来恢复已删除的功能。我想我现在可以用它来编译这个项目。从长远来看,我会看到将 websocketpp 升级到 C++17 或用其他东西替换它。

但是,恢复功能的魔力是什么?有什么我需要#define 的吗?如果有,是什么?

【问题讨论】:

    标签: visual-studio-2017 c++17 deprecated


    【解决方案1】:

    在 VS2017 v15.5 中,根据项目的 /std:c++17 设置,有条件地排除它。您可以通过强制基础宏值来强制包含它。两种基本方法:

    1. 项目 > 属性 > C/C++ > 预处理器 > 预处理器定义并添加 _HAS_AUTO_PTR_ETC=1。对所有配置和平台都这样做。
    2. 如果您使用预编译的头文件,那么您可能更喜欢在那里定义宏。在任何 #include 之前,插入 #define _HAS_AUTO_PTR_ETC 1

    当心“ETC”,您还会使用已弃用的 random_shuffle() 和 unary_function。预测未来很困难,但这可能会在未来一段时间内奏效。

    【讨论】:

    • 我尝试在VS2019中使用_HAS_AUTO_PTR_ETC,但没有帮助。我切换到使用 unique_ptr。
    • 不,在VS2019的版本<memory>中仍然使用它来定义auto_ptr。
    • 汉斯 - 是的,我的错。包括 是必要的。我无法编辑我之前的评论,因此将其作为单独的评论发布。
    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 2011-06-05
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 2020-08-04
    相关资源
    最近更新 更多