2

そのため、渡されたパラメーターが function に触れてはならないものを作成することについて、より厳密になるように努めてきましたconst

一部の C++ コードで遭遇した状況の 1 つは、オブジェクトが変更される可能性があるが、オブジェクトの特定の重要な機能にアクセスできないように関数を「ロックアウト」したい場合です。たとえば、std::ifstreamファイル ハンドルの場合、関数がファイルを閉じないようにしたい場合があります。

として渡すとconst &、そのconst部分が標準のファイル i/o を実行できないようです。

たとえば、次のようなものが欲しい

void GetTags(Arr<std::string> & tags, std::ifstream const& fileHandle)

...しかし、ファイルの i/o は許可するが、開く/閉じる操作は許可しないように記述されています。

C ++でこれを行うための良い/信頼できる方法はありますか? ベストプラクティスと見なされるものは何ですか?

4

4 に答える 4

6

これは、標準ライブラリの設計によって既に行われています。代わりに、参照を基本クラスに渡します。これには、開始または終了の概念がなく、ストリーム インターフェイスのみstd::istreamが公開されます。

void stream_me(std::istream & is);

std::ifstream is("myfile.txt");
stream_me(is);
于 2012-09-05T15:37:22.060 に答える
1

あなたの代わりに、std::istream代わりに a を渡すだけです。

于 2012-09-05T15:38:10.080 に答える
0

呼び出し元が使用できるようにしたい機能のみを公開するオブジェクトでifstreamをラップすることができます。

ただし、ifstreamの機能のサブセットがそれぞれ異なる多数の異なる関数がある場合は、多くの異なるラッパークラスが作成されることになります。したがって、これを一般的な解決策とは見なしていません。

于 2012-09-05T15:33:07.147 に答える
0

ifstreamアクセスしたい機能に対応するメンバー関数のみを持つ新しいクラスでラップするのが最善の方法だと思いますGetTags。次に、それをifstream2番目の引数としてではなく渡しますGetTags

于 2012-09-05T15:33:54.013 に答える