Как я могу вернуть массив символов с Boost:: необязательно

Я пытаюсь вернуть простой массив с Boost:: Необязательно

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

Как я могу справиться с такой путаницей?

2 ответа

Решение

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 как в примере сэхэ

Удачи!!

Самое близкое, что вы можете сделать, это использовать оболочку с семантикой значения.

Эта обертка std::array:

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

О массивах и указателях:

Другие вопросы по тегам