如何将字符串设置为可选字符串值?

How to set a string to an optional string value?

由于程序(C++)中的一些限制,我有一个案例,我将一个可选字符串分配给一个字符串变量,这会产生以下错误: error: no match for ‘operator=’ ...

这段代码是这样的:

void blah(std::experimental::optional<std::string> foo, // more parameters)
{
    std::string bar;
    if(foo)
    {
        bar = foo; //error
    }

    // more code
}

尝试次数:

我尝试使用以下方法转换类型以匹配:

bar = static_cast<std::string>(foo);

最终显示此错误:

error: no matching function for call to ‘std::basic_string<char>::basic_string(std::experimental::optional<std::basic_string<char> >&)’

我在想:

  1. 有办法处理这种情况吗?
  2. 否则这是设计限制,我必须使用其他方法而不是将可选字符串分配给普通字符串?

你有几种方法:

  • /*const*/std::string bar = foo.value_or("some default value");
    
  • std::string bar;
    if (foo) {
        bar = *foo;
    }
    
  • std::string bar;
    if (foo) {
        bar = foo.value();
    }