【发布时间】:2020-07-06 22:24:10
【问题描述】:
我正在尝试更新一些源代码以使其与 Visual Studio 2013 兼容。
在某些时候,我在以下模板上出现错误:
// Means of generating a key for searching STL collections of std::unique_ptr
// that avoids the side effect of deleting the pointer.
template <class T>
class FakeUniquePtr : public std::unique_ptr<T> {
public:
using std::unique_ptr<T>::unique_ptr;
~FakeUniquePtr() { std::unique_ptr<T>::release(); }
};
我收到以下错误:
error C2886: 'unique_ptr<_Ty,std::default_delete<_Ty>>' : symbol cannot be used in a member using-declaration
我想知道如何调整此代码以使其与 Visual Studio 2013 兼容,以及该代码的含义是什么。如何更新它以使代码与 VS2013 兼容?
【问题讨论】:
-
根据devblogs.microsoft.com/cppblog/… VS2013 不支持此功能(继承构造函数)。您很可能必须将其替换为您自己的调用
unique_ptr构造函数的构造函数 -
所以基本上我需要编写
FakeUniquePtr的构造函数来调用std::unique_ptr的相应构造函数? -
据我所知,是的。(根据提案:open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm,这是该功能应该解决的问题)。也许其他人有更好的主意
-
@UnholySheep 你应该这样回答。顺便说一句,它与 VS2019 一起编译(如预期的那样)。
-
是的,它可以构建,但我需要对其进行调整,因为我需要在使用 VS2013 创建的旧项目中使用此代码,并且无法更新编译器。
标签: c++ visual-studio visual-studio-2013 using