我已经习惯于通过让编译器找出所涉及的魔法来以下列方式初始化 std::strings
std::string my_string = "hello";
以下将不起作用,因为这两种类型之间没有显式转换:
boost::optional<std::string> my_optional_string = "hello";
然而,这确实有效:
boost::optional<std::string> my_optional_string = std::string("hello");
现在,是否没有办法将隐式调用的单参数构造函数菊花链化以允许第二种形式?我问的原因(虽然我不想用细节来打扰你)是有一大堆类需要填充可选成员。必须显式键入所有内容似乎是一种负担(我并不太担心自己,但我正在开发一个开源 API,并希望为我的用户提供尽可能多的舒适感)。任何建议表示赞赏。
编辑:对不起,我是新手,应该提供更多澄清的代码示例。我有一些类(不是我自己建模的,只是在 C++ 中实现它们),其中包含要填充的可选成员,如下所示:
Class Class1 {
public:
Class1(const boost::optional<std::string>& arg_1, /*... ,*/ const boost::optional<std::string>& arg_n );
};
我希望我的 API 用户能够指定的是:
Class1 my_class("hello","there",NULL,"stackoverflow");
/* ( Note: NULL is actually risky here, as some classes might also have members of type boost::optional<int> ) */
并不是:
Class1 my_class(std::string("hello"),/*or*/boost::optional<std::string>("there"),boost::optional<std::string>(),std::string("stackoverflow"));
再次感谢。