4

私はこの関数を差し迫って必要としていますstd::forward_as_tupleが、GCC 4.5.0 の使用に制限されています (これは自分自身を配置するのに悪い状況であることはわかっていますが、それは私にとって多くの問題を解決するので、皮肉な発言は控えてください最小)。<tuple>ヘッダーには関数が含まれていないようです(本来あるべき)ので、私の質問は次のとおりです。

  1. 他のヘッダーに隠されていますか?(これは以前にも発生しましたが、特定するのは困難です。)
  2. 独自の実装を展開することは可能ですか? つまり、GCC 4.5.0 で実装されているc++11 の部分で実装可能ですか? 誰かが実際にこれを行う方法を知っている場合のボーナス。
4

2 に答える 2

5

実装は簡単です:

template <typename... Elements>
/*constexpr*/ tuple<Elements&&...>
forward_as_tuple(Elements&&... args) /* noexcept */
{
    return tuple<Elements&&...>(std::forward<Elements>(args)...);
}

どの GCC に表示されるかわかりません。このドキュメントによれば、gcc 4.3以降、可変個引数テンプレートと右辺値参照が利用可能であるため、gcc 4.5で機能するはずです(願っています)。

于 2012-12-18T03:52:33.727 に答える
1

他のヘッダーに隠されていますか?(これは以前にも発生しましたが、特定するのは困難です。)

何が大変grep

<tuple>ヘッダーに関数が含まれていないようです(本来あるべきです)

std::forward_as_tuple2010 年 3 月にN3059で最初に呼び出されstd::pack_arguments、提案され、N3092 ワーキング ドラフトに初めて登場しました。GCC 4.5.0 がリリースされたのは 2010 年 4 月で、そのドラフトではインクがほとんど乾いていませんでした。

メンテナンスされていない C++11 より前のコンパイラで C++11 の機能を自由に試してみてください。新しいリリース!

少なくともGCC 4.5.4 を使用する必要があります。.dot-oh リリースを使用するとトラブルが発生するだけです。後の 4.5.x リリースで修正される新しいバグでいっぱいになります (ただし、forward_as_tupleorpack_argumentsは最初に含まれていません)。 GCC 4.6 で登場)

boost::tuple代わりに、古いコンパイラに対しても機能を完全に実装しようとする使用を検討できます。

于 2012-12-18T10:25:31.580 に答える