私はstd::unique_ptr
例えばを使い始めました:
unique_ptr<TFile> myfile( TFile::Open("myfile.root") );
それ以外の
TFile * myoldfile = TFile::Open("myoldfile.root") ;
今、自分の関数がどのように見えるべきかわかりません。問題の一部は、問題が明らかになるほどコードがまだ複雑ではないことかもしれませんが、物事がより複雑になったときに混乱しないように、今すぐ取得したいと思います。
私はかつて持っていた:
double interestingResult( TFile * input )
{...}
(これは実際には TFile を変更しませんが、TFile の一部の非 const 関数を呼び出すため、const にすることはできません)。
私はまだこれを呼び出すことができます:
myResult = interestingResult( myfile.get() );
これはあまりユーザーフレンドリーではないようです。(ここで提案されていると思います: https://stackoverflow.com/a/5325560/1527126。)
または、関数を次のように変更できます。
double interestingResult( unique_ptr<TFile>& input )
{...}
これにより、ユーザーは常に unique_ptr を使用することになります。
または、次のように書くことで両方をサポートできます。
double interestingResult( unique_ptr<TFile>& input )
{ return interestingResult( intput.get() ); }
しかし、他の人のコードではそれが見られません。
この状況に対する標準的なアプローチは何ですか?
この回答( https://stackoverflow.com/a/9700189/1527126myfile
)は、nullになるとは思わないため、参照を受け入れる必要があることを意味していると思います。しかし、ライブラリ関数TFile::Open
は常にポインターを返すため、追加の逆参照なしで直接関数に渡すことができるのは当然のようです。
申し訳ありませんが、私は StackOverflow または CodeReview で質問する必要があるかどうかを判断することをあきらめましたが、そうでない場合は適切な場所を教えてください。