我正在尝试创建一个返回std::optional
to的函数Buffer
:
std::optional<Buffer> receive(SmolSocket smolSocket)
{
//...
return std::optional<Buffer>(buffer);
}
Buffer
简单的在哪里
struct Buffer
{
public:
std::unique_ptr<uint8_t[]> data;
size_t len = 0;
bool empty = false;
Buffer(CBuffer cBuffer)
{
data = std::unique_ptr<uint8_t[]>(cBuffer.data);
len = cBuffer.len;
}
Buffer(bool empty)
{
data = std::unique_ptr<uint8_t[]>(nullptr);
this->len = 0;
this->empty = empty;
}
uint8_t* getData()
{
return data.get();
}
};
但我收到很多错误:
/workspaces/libopenvpnclient/src/libopenvpn/../../smoltcp_cpp_interface/src/virtual_tun/interface.h:283:52: error: no matching function for call to 'std::optional<smoltcp::Buffer>::optional(smoltcp::Buffer&)'
283 | return std::optional<Buffer>(buffer);
/usr/include/c++/9/optional:760:2: note: candidate: 'template<class ... _Args, typename std::enable_if<__and_v<std::is_constructible<smoltcp::Buffer, _Args&& ...> >, bool>::type <anonymous> > constexpr std::optional<_Tp>::optional(std::in_place_t, _Args&& ...)'
760 | optional(in_place_t, _Args&&... __args)
| ^~~~~~~~
/usr/include/c++/9/optional:760:2: note: template argument deduction/substitution failed:
/usr/include/c++/9/optional:758:56: error: no type named 'type' in 'struct std::enable_if<false, bool>'
758 | _Requires<is_constructible<_Tp, _Args&&...>> = false>
note: 'smoltcp::Buffer' is not derived from 'std::optional<_Tp>'
283 | return std::optional<Buffer>(buffer);
我std::optional
在其他情况下使用过,我看不出这里有什么问题。
我也尝试使用return std::optional<Buffer>{buffer};
.