アプリケーションの開発中に、次の問題がありました。与えられた関数ポインタがnullの場合は空のstd::list<string>
を返すか、そうでない場合はその関数の結果を返したいと思います。私は通常、これらの場合に三元(?:
)演算子を使用したい、しかし3進演算子+ C++ 11 initializer_listのコンストラクタ
typedef std::list<std::string> (*ParamGenerator)();
std::list<std::string> foo() {
/* ... */
ParamGenerator generator = ...;
if(generator)
return generator();
else
return {};
}
ので、私は(いつものように)それをこのように使用してみました:これは私のコードの簡易版である
return generator ? generator() : {};
しかし、このエラーを得た:
somefile.cpp:143:46: error: expected primary-expression before ‘{’ token
somefile.cpp:143:46: error: expected ‘;’ before ‘{’ token
この平均は私がinitializer_list
から自分のコンストラクタを使用して作成されたオブジェクトを返すように三項演算子を使用することはできませんでしょうか?何か特別な理由はありますか?
私のアドバイスは次のようなものです:**これはまったく行いません**。イテレータ(その型はテンプレートパラメータです)をとる汎用的なアルゴリズムにしてください。そうすれば、 'std :: list'が悪い選択であると分かったときに、比較的無痛に何かに変更することができます。 –
@JerryCoffinおそらくその助言を取るでしょう;)。私はそれがとにかく(それができない場合それができない場合はなぜ)可能かどうかを知りたいです。 – mfontanini
さて、十分に公正。正確なアプリケーションがおそらく最善ではないと思うにしても、面白い質問です。 –