C++のstd::get<T>
がグローバル関数で、variant<...>
のメンバー関数ではない理由を教えてもらえますか?なぜstd :: <T>は `variant`にグローバル関数を与えますか?
答えて
get<T>()
がメンバー関数テンプレートの場合は、従属コンテキストで呼び出されるときにtemplate
キーワードが必要になります。たとえば:でもusing
宣言またはディレクティブget()
なし
template <typename Variant>
void f(Variant const& v) {
auto x0 = v.template get<T>(); // if it were a member
auto x1 = get<T>(v); // using a non-member function
}
std::variant<...>
とget()
両方として見つかった場合は、名前空間std
で宣言されています。したがって、グローバル関数が使い易いため、メンバ関数とする正当な理由はないようです。
さて、 'get
@ T.C .:良い点 - テンプレートパラメータでは、ADLを介して直接見つけられません。それはグローバルスコープで宣言されている、呼び出し可能でない関数テンプレート(例えば 'template
- 1. なぜstd :: variantはC言語でstd :: variant <int、const int>
- 2. なぜostream :: operator <<はcharパラメータのグローバル関数ですか?
- 3. std :: variantをスーパータイプの別のstd :: variantに変換する
- 4. 与えられたハッシュ関数はなぜ貧弱なハッシュ関数ですか?
- 5. この例では、std :: variantはvalueless_by_exceptionになりますか?
- 6. この関数はなぜ私に無限ループを与えていますか?
- 7. なぜ仮想関数がセグメンテーションフォルトを与えるのですか
- 8. std :: shared_ptr << std :: vector <double>>を関数に渡す
- 9. boost :: variant <std :: vector <int>、std :: vector <String>>を反復処理する方法は?
- 10. std :: variantで可能なように、boost :: variantのインデックスでアイテムを取得する
- 11. テンプレートはstd :: variantの訪問に使用できますか?
- 12. ガウス関数が範囲外の値を与えるのはなぜですか?
- 13. グローバル変数の値を関数に渡さないのはなぜですか?
- 14. なぜRxScalaのdoOnSubscribe関数に与えられた関数を実行しないのですか?
- 15. なぜstd :: set <> :: findはconstを返しますか?
- 16. std :: variantにoperator <<を書くにはどうすればいいですか?
- 17. なぜSpring csrfは私に403ネットワークエラーを与えますか?
- 18. なぜgroovycはセキュリティマネージャーに影響を与えますか?
- 19. なぜgccは私にこの結果を与えますか?
- 20. なぜ117.5 \ 19.5はvb.netで5を私に与えますか?
- 21. なぜSetlengthは結果に値を与えますか? (デルファイ)
- 22. 簡単な質問:なぜ文字列ライブラリ関数std :: string :: findは常にstd :: string :: nposを返しますか?
- 23. なぜ `std :: common_type_t <std :: ostream&、std :: ostream&>`は `std :: ostream`ではなく` std :: ostream`と同じですか?
- 24. Boost Graph Libraryの `source()`はなぜグローバル関数ですか?
- 25. should :: std :: remove_cv <>は関数型で動作しますか?
- 26. なぜstd :: bind'ed関数に移動する必要はありませんか?
- 27. trig関数の特定の値が正しい答えを与えないのはなぜですか?
- 28. バリアント、ベクトル<variant>とベクトル<ベクター<variant>>を私の選択と同等のタイプに変換する
- 29. g ++でstd :: variantを使用する
- 30. ベクトル<specific_type>をベクトルにキャストする<boost :: variant>
私は補足的な質問をします:なぜそれがメンバー機能でなければならないのでしょうか? –
[タプルと同じ](https://stackoverflow.com/questions/3313479/stdtuple-get-member-function)最も確実です。構文はあまりにも醜い取得します。 –