如何使用boost :: optional返回char数组

时间:2017-08-29 16:00:26

标签: c++11 boost boost-optional

我尝试使用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);
 }

我该如何处理这种混乱?

2 个答案:

答案 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推断archar [100]类型,但预计会const char *。默认情况下,模板参数扣除中不会发生隐式转换。

如果要使用原始指针,可以使用以下解决方案:

boost::optional<const char *> foo () {
    char ar[100] = {};
    return boost::make_optional(true, static_cast<const char *>(ar));
}

但在这种情况下,您会丢失信息中有多少元素位于此数组中,最好在foo()函数std::vectorstd::array中使用,例如 sehe

祝你好运!!