オプションのパラメータ:(。私はstd::optional
までstd::experimental::optional
エイリアシングてる正式に利用可能である)関数呼び出し::私が署名され機能してい
void func(std::optional<std::string> os = std::nullopt);
を
しかし、私がいる困難それをきれいに呼びます。コンパイラは、未処理のC文字列リテラルを使用して2つの暗黙的な変換(const char*
→std::string
→std::optional<std::string>
)を呼び出すことを拒否します。私はこれを行うことができます:
func(std::string("Hello"));
とコンパイラはstd::optional
が必要であることを理解し、変換を行います。しかし、これはあまりにも冗長です。 C++ 11のおかげで、私もこれを行うことができます。これはずっといいですが
func({"Hello"});
を、それはまだ理想的ではありません。私はstd::string
を取る他のどのようなこの関数を呼び出すことができるようにしたいと思います。 これは可能ですか?関数を別のパラメータ型にすることは、/と同様に動作するかぎり、直接std::optional
に変換できる限り、大丈夫です。ありがとう。
パラメータと 'のstd :: STRING'パラメータなしで、単に機能をオーバーロードして何が悪いのでしょうか? –
@SamVarshavchik私の知る限りでは、大規模な複製を避けるために3つのオーバーロードが必要になるでしょう:void func(std :: optional os = std :: nullopt) '、' void func(std :: string s) ' 'void func()'。後者の2つは前者を呼び出し、必要に応じてオプションのものを作成します。あなたが私を間違っていると証明できれば嬉しいです。これは技術的には機能しますが、不必要なインターフェイスコードがたくさんあります。しかし、ありがとう。 –
ThatsJustCheesy
さて、 'func(" std :: string literal "s);'大丈夫ですか? – DeiDei