Как я могу вернуть массив символов с 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);
}
О массивах и указателях: