私は std::strings を次のように初期化することに慣れてきました。
std::string my_string = "hello";
2 つの型の間に明示的な変換がないため、以下は機能しません。
boost::optional<std::string> my_optional_string = "hello";
ただし、これは機能します。
boost::optional<std::string> my_optional_string = std::string("hello");
さて、暗黙的に呼び出された単一引数のコンストラクターをデイジーチェーン接続して、2 番目の形式を許可する方法はありませんか? 私が質問する理由は (詳細について煩わされたくないのですが)、オプションのメンバーを設定するクラスがたくさんあるからです。すべてを明示的に入力しなければならないのは負担に思えます (私自身はそれほど心配していませんが、オープン ソース 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"));
再度、感謝します。