无法使 std::unique_ptr<std::istream> 持有指向 std::ifstream 的指针

问题描述 投票:0回答:0

考虑以下代码(为简单起见断章取义):

std::unique_ptr<std::istream> stream;
stream = std::make_unique<std::ifstream>(path, std::ios::in | std::ios::binary);

此代码在 MSVC 上编译得很好并且没有问题,但是 Clang 发出错误:

error: no viable overloaded '='
stream = std::make_unique<std::ifstream>(path, std::ios::in | std::ios::binary);

除了上面的错误,日志还声称 'unique_ptr<std::basic_ifstream<char>, default_delete<std::basic_ifstream<char>>>' 不能转换为 'unique_ptr<std::istream, default_delete<std::istream>>'.

我不能使用引用,因为我需要在当前范围之外保持 stream 活动,所以指针似乎是唯一的解决方案。我该如何解决这个问题?

c++ smart-pointers unique-ptr istream
© www.soinside.com 2019 - 2024. All rights reserved.