我有一个函数,其签名是:
void func(std::optional<std::string> os = std::nullopt);
(在正式可用std::experimental::optional
之前,我一直在使用别名。)std::optional
但是,我很难干净地调用它。编译器将拒绝执行两次隐式转换(const char*
➝ std::string
➝ std::optional<std::string>
)以使用原始 C 字符串文字调用它。我可以这样做:
func(std::string("Hello"));
编译器会认为 astd::optional
是必需的,并进行转换。但是,这太冗长了。感谢 C++11,我也可以这样做:
func({"Hello"});
虽然这样更好,但仍然不理想。我希望能够像其他任何需要std::string
. 这可能吗?让函数采用另一种参数类型是可以的,只要它的行为类似于/可以直接转换为std::optional
. 谢谢。