出力引数をポインタまたは参照として渡すことができます。このよう
:このような
template<class T> void parse(const std::string &input, T& output);
次にコード:
double d; parse(input, d);
int i; parse(input, i);
が動作するはずです。
しかし、あなたのコードは、STDのための完璧なフィットのように見える::だけだろうistringstream:
istringstream is(input);
input >> d;
あなたが関与やや複雑なフォーマットを持っている場合は、私はかなり良い運を持っていたトリックを作成する必要がデータを引き出すカスタム演算子>>を持つカスタムオブジェクト。
そして、それは次のように次のようになります。今、あなたはちょうど
float a = parse("3.1");
を行う必要があり、それがうまく動作するはずです。これは、
struct proxy {
string str;
proxy(string const &str):str(str) { }
template<typename T> operator T() {
return boost::lexical_cast<T>(str);
}
};
proxy parse(string const &str) { return proxy(str); }
変換機能を使って行うことができ
istringstring is(input);
input >> LineExtracter(x, y, d);
これはちょっと間違っています。あなたは()演算子を呼び出すのではなく、単に演算子を呼び出すことになります。私は確信していないので、私はダウン投票していない。どうか明らかにしてください。 –
i)は(OPを呼び出すつもりはなかった:)私はプロキシを返された関数を呼び出しました。 2番目の部分では、間に介在する関数なしでクラスを直接使用することを提案しています –
ありがとうGMan、ありがとう:) –