gpt4 book ai didi

c++ - "using"(或其他机制)在 C++11 中将 unique_ptr 换成 auto_ptr?

转载 作者:行者123 更新时间:2023-11-30 00:48:23 28 4
gpt4 key购买 nike

我在 Cygwin 下用 -std=c++11 捕捉到一个编译警告:

cryptlib.cpp: In member function ‘virtual size_t PK_Signer::SignMessage(RandomNumberGenerator&, const byte*, size_t, byte*) const’:
cryptlib.cpp:770:41: warning: ‘auto_ptr’ is deprecated (declared at /usr/lib/gcc/x86_64-pc-cygwin/4.9.3/include/c++/backward/auto_ptr.h:87) [-Wdeprecated-declarations]
std::auto_ptr<PK_MessageAccumulator> m(NewSignatureAccumulator(rng));
^

我尝试添加:

#if defined(MYLIB_CXX11)
using auto_ptr = std::unique_ptr;
#else
using std::auto_ptr;
#endif

auto_ptr<PK_MessageAccumulator> m(NewSignatureAccumulator(rng));

但结果如下,即使是 <memory>包括在内。

$ make cryptlib.o 
c++ -std=c++11 -DNDEBUG -g2 -O3 -fPIC -march=native -DCRYPTOPP_DISABLE_ASM -Wall -Wextra -pipe -c cryptlib.cpp
cryptlib.cpp:770:27: error: no type named 'unique_ptr' in namespace 'std'
using auto_ptr = std::unique_ptr;
~~~~~^

我还尝试了以下变体:

#if defined(MYLIB_CXX11)
typedef std::unique_ptr<T> local_ptr<T>;
#else
typedef std::auto_ptr local_ptr;
#endif

我无法完全切换到 unique_ptr因为它是一个 C++03 库,而 C++03 缺少 unique_ptr .而且我不能让脏编译在 C++11 下继续,因为干净编译是一个安全门,治理不会让库通过。 (并且警告技巧是不可能的,因为这应该是简单的、容易实现的目标。警告技巧包括禁用警告)。

是否可以使用“using”换入unique_ptr ?还是有其他机制?

最佳答案

我尝试添加:

using auto_ptr = std::unique_ptr;
using std::auto_ptr;
auto_ptr<PK_MessageAccumulator> m(NewSignatureAccumulator(rng));

但它导致以下结果,即使包含在内。

cryptlib.cpp:770:27: error: no type named 'unique_ptr' in namespace 'std'

那是因为std::unique_ptr 是一个模板,而不是一个类型。相反,这应该有效

#if __cplusplus >= 201103L
// with C++11 we have std::unique_ptr (and std::auto_ptr is deprecated)
template<typename T>
using auto_ptr = std::unique_ptr<T>;
#else
// assuming C++03 when there is std::auto_ptr
using std::auto_ptr;
#endif

(要求您在代码中仅使用 auto_ptr,而不是 std::auto_ptr)。


当然,我假设您使用有效的 C++ 编译器和标准库。在 Mac OS 上,你可以使用(你可能需要安装 Xcode 和命令行工具)

/usr/bin/c++ -std=c++11 -stdlib=libc++

调用 clang C++ 编译器和 clang C++ 标准库。

关于c++ - "using"(或其他机制)在 C++11 中将 unique_ptr 换成 auto_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31646118/

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