問題タブ [uniform-initialization]
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++ - 初期化子リストで std::map::operator= を使用する方法
以前に同じ質問をしましたがboost::assign::map_list_of
(回答はありませんでした)、ブレースの初期化を使用すると役立つかもしれないと思いましたが、そうではありませんでした。
これは完全に機能します:
しかし、これはしません:
Visual Studio 2013 でエラーが発生します。またはのerror C2593: 'operator =' is ambiguous
いずれoperator=(std::initalizer_list)
かoperator=(std::map&&)
です。
2 番目のバージョンを動作させることは可能ですか? たとえば、m
がメンバー変数である場合。
c++ - 暗黙の変換を防ぎますが、リストの初期化を許可しますか?
FunctionWrapper
次のように定義されたクラスがあるとしましょう:
std::function<void()>
からへの暗黙的な変換を防止したいのですFunctionWrapper
が、ブレースの初期化構文を使用して を構築できるようにFunctionWrapper
します (つまり、単一の引数でリストの初期化を使用します)。言い換えれば、私はこれが欲しい:
それを達成する方法はありますか?上記のクラスを定義した方法はそうではありません。これにより、暗黙的な変換が可能になるため、(1) コンパイルされます。
explicit
コンストラクターに追加すると:
それは「行き過ぎ」になり、(1) と同様に (2) も許可しないため、どちらも役に立ちません。
「中間点」を達成し、(1) がエラーを生成している間に (2) コンパイルする方法はありますか?
c++ - カスタムブレース初期化子
私がこの構造体を持っているとしましょう:
私が知る限り、これはいくつかのコンストラクターがあるため、集計ではありません。
私が達成したいのは、中括弧初期化子を独自の方法で使用することです。つまり、次のようなコードを使用します。
適切なコンストラクター (この場合は最初のコンストラクター) を暗黙的に呼び出します。
これは何らかの方法で可能ですか?