問題タブ [stdany]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++11 標準は、boost::any のようなものを提供していますか?
たとえば、boost::function
ほぼ完全に に移動std::function
します。boost::shared_ptr
しかし、私は見つけることができませんstd::any
か?なんらかの理由で名前が変更されたのか、それとも新しい標準にまったく配置されなかったのか?
c++ - C++ std::map 任意の型の値を保持
基本的に、フィールド名(文字列)を任意のタイプの値にマップするハッシュマップを保持する MyClass が必要です。この目的のために、タイプと値の情報を保持する別の MyField クラスを作成しました。
これは私がこれまでに持っているものです:
しかし、ご覧のとおり、MyField の型パラメーターを指定しなかったため、マップ宣言は失敗します...
だから私はそれが次のようなものでなければならないと思います
また
しかし、宣言されたマップは特定のタイプの MyField しか保持できないため、明らかにこれは私の目的全体を損ないます..任意のタイプの MyField クラスを保持できるマップが必要です..
これを達成する方法はありますか..?
c++ - タイプ消去タイプ消去、「何か」質問はありますか?
では、type eraser を使用して type erase を実行したいとします。
自然を可能にするバリアントの疑似メソッドを作成できます。
私の質問は、これをどのように拡張するのstd::any
ですか?
「そのまま」ではできません。しかし、a に代入/構築する時点で、std::any
必要な型情報が得られます。
したがって、理論的には、拡張されたany
:
上記のタイプの構文が機能するように、何らかのコードを自動的に再バインドできます。
理想的には、バリアントの場合と同じくらい簡潔に使用されます。
これをtypeに保ちながら、ラムダ構文を合理的に使用して物事を単純にすることはできますか?
理想的には私が欲しい:
または同様の構文。これは不可能ですか?実行不可能ですか?簡単?
c++ - std::any および std::optional を使用した any_cast
を に入れると、T
でstd::any
取得できますany_cast<T>(my_any)
。しかし、標準 (= C++17、現時点では投票段階) には、oa がそうである場合とそうでない場合any_cast<T>(optional<any> oa)
を返すような関数が含まれていますか? またはそれらの線に沿った何か?nullopt
nullopt
std::any_cast<T>(oa.value())
編集:人々が実装を提案しているように見えるので、私が今使っているものもリストします:
c++ - `std::any_cast` はコピーを返します
のドキュメントをstd::any_cast
読んでいましたが、API のキャストが、保持されているオブジェクトまたはそれへのポインターに値を返すのは奇妙だと思います。参照を返さないのはなぜですか? 関数が非ポインター型の引数で呼び出されるたびに、コピーを作成する必要があります。
キャストのポインター バージョンは、もう少し意図を示し、もう少し明確になる可能性があることがわかりますが、返される値をこのような参照にしないのはなぜですか?
それ以外の
さらに、参照を要求しても、キャストが参照を削除し、格納されたオブジェクトにコピーを返すように見えます。ここで関数オーバーロード 1-3 の戻り値の説明を参照してください http://en.cppreference.com/w/ cpp/ユーティリティ/any/any_cast