我尝试使用boost :: optional
返回简单数组could not convert ‘boost::make_optional(bool, const T&) [with T = char [100]](ar)’ from ‘boost::optional<char [100]>’ to ‘boost::optional<const char*>’ return boost::make_optional(true, ar);
我收到以下错误:
itemList : Item[] = []; itemCreated(item: Item){ itemList.push(item); }
我该如何处理这种混乱?
答案 0 :(得分:3)
最接近的是使用带有值语义的包装器。
该包装器为std::array
:
boost::optional<std::array<char, 100> > foo () {
std::array<char, 100> ar {};
return boost::make_optional(true, ar);
}
关于数组与指针:
答案 1 :(得分:1)
boost::make_optional
推断ar
为char [100]
类型,但预计会const char *
。默认情况下,模板参数扣除中不会发生隐式转换。
如果要使用原始指针,可以使用以下解决方案:
boost::optional<const char *> foo () {
char ar[100] = {};
return boost::make_optional(true, static_cast<const char *>(ar));
}
但在这种情况下,您会丢失信息中有多少元素位于此数组中,最好在foo()
函数std::vector
或std::array
中使用,例如 sehe 强>