0

私はこのようなことをしたいと思います:

std::wistream input = std::wifstream(text);
if (!input) input = std::wistringstream(text);
// read from input

つまり、テキストをファイル名として解釈するか、そのようなファイルが存在しない場合は、ファイルの内容の代わりにその内容を使用します。

もちろん、実際のストリームにはstd::wistream * inputand thennewとを使用できます。deleteしかし、その場合、これらすべてをクラス (コンストラクターとデストラクター、つまり例外安全のための適切な RAII) にカプセル化する必要があります。

スタックでこれを行う別の方法はありますか?

4

4 に答える 4

2

動作するロジックをstd::wistream& input独自の関数に抽象化し、適切にstd::wifstreamまたはで呼び出すことができstd::wistringstreamます。

于 2011-10-01T18:00:11.333 に答える
2

もちろん、std::wistream * input を使用してから、実際のストリームに対して new と delete を使用することもできます。しかし、その場合、これらすべてをクラス (コンストラクターとデストラクター、つまり例外安全のための適切な RAII) にカプセル化する必要があります。

これがstd::unique_ptr目的です。を使用するだけstd::unique_ptr<std::istream>です。

于 2011-10-01T18:09:10.787 に答える
1

スタックでこれを行う別の方法はありますか?

とんでもない。

C++ のすべてのストリーム クラスでコピー割り当てが無効になっているため、使用できません。

于 2011-10-01T18:01:00.320 に答える
1

wistream ポインターを管理するために auto_ptr または unique_ptr を検討しましたか?

http://www.cplusplus.com/reference/std/memory/auto_ptr/

于 2011-10-01T18:04:50.223 に答える