0

我尝试使用 boost::optional 返回简单数组

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

我收到以下错误:

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);

我该如何处理这种混乱?

4

2 回答 2

3

最接近的方法是使用具有值语义的包装器。

该包装是std::array

boost::optional<std::array<char, 100> > foo () {
   std::array<char, 100> ar {};
   return boost::make_optional(true, ar);
}

关于数组与指针:

于 2017-08-29T16:29:51.110 回答
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的示例

祝你好运 !!

于 2017-08-29T18:11:47.947 回答