C ++ 11でタプルを使用するための良いユースケースは何ですか?たとえば、ローカル構造体を次のように定義する関数があります。
template<typename T, typename CmpF, typename LessF>
void mwquicksort(T *pT, int nitem, const int M, CmpF cmp, LessF less)
{
struct SI
{
int l, r, w;
SI() {}
SI(int _l, int _r, int _w) : l(_l), r(_r), w(_w) {}
} stack[40];
// etc
SI
構造体を。に置き換えることを検討していましたstd::tuple<int,int,int>
。これは、便利なコンストラクターと演算子が既に事前定義されているはるかに短い宣言ですが、次の欠点があります。
- タプル要素は、あいまいな実装定義の構造体に隠されています。Visual Studioはその内容を適切に解釈して表示しますが、タプル要素の値に依存する条件付きブレークポイントを設定することはできません。
- 個々のタプルフィールド(
get<0>(some_tuple)
)へのアクセスは、構造体要素()へのアクセスよりもはるかに冗長ですs.l
。 - 名前でフィールドにアクセスすることは、数値インデックスよりもはるかに有益です(そして短くなります!)。
最後の2つのポイントは、関数によっていくらか対処されtie
ます。これらの不利な点を考えると、タプルの良いユースケースは何でしょうか?
UPDATE VS2010 SP1デバッガーは次の配列の内容を表示できないことが判明しましたstd::tuple<int, int, int> stack[40]
が、構造体でコーディングされている場合は正常に機能します。したがって、決定は基本的に簡単です。値を検査する必要がある場合は、構造体[esp。GDBのようなデバッガーでは重要です]。