我怎样才能 return 字符数组与 boost::optional
How can I return char array with boost::optional
我尝试 return 简单数组 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);
我该如何处理这种困惑?
最接近的方法是使用具有值语义的包装器。
包装器是 std::array
:
boost::optional<std::array<char, 100> > foo () {
std::array<char, 100> ar {};
return boost::make_optional(true, ar);
}
关于数组与指针:
- How do I use arrays in C++?
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
祝你好运!!
我尝试 return 简单数组 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);
我该如何处理这种困惑?
最接近的方法是使用具有值语义的包装器。
包装器是 std::array
:
boost::optional<std::array<char, 100> > foo () {
std::array<char, 100> ar {};
return boost::make_optional(true, ar);
}
关于数组与指针:
- How do I use arrays in C++?
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
祝你好运!!