問題タブ [apply-visitor]
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.
lambda - Boostバリアントのコンテナ用にBoost multi_index MEM_FUNキーエクストラクタを作成することは可能ですか?
Boost::variant オブジェクトの multi_index コンテナを実装しようとしています。バリアントは、1 つの共通ベース オブジェクトの 2 つの派生クラスで構成されます。どの派生オブジェクトがバリアントを占有しているかに関係なく、適切なキー値を提供するために、std::pair<char,char> を返す各派生クラス ("extractKey()") に仮想関数を実装しました。
キー値を取得するために、apply_visitor() (おそらくラムダ式で?) を使用して "extractKey()" 関数を CONST_MEM_FUN キー エクストラクタとして呼び出すにはどうすればよいですか? これを達成するために構文を正しくすることができませんでした。
Visual Studio 2019 と C++17 を使用しています。
編集:私はすでに、派生オブジェクトでベースオブジェクトポインターと仮想関数のコンテナーを使用するだけのはるかに健全で従来のソリューションを持っていますが(バリアントはありません!)、根本的に異なるオブジェクト(派生オブジェクトではない)を格納する必要がある場合は、他のシナリオが発生しますmulti_index コンテナー内の共通の基本オブジェクトから)。それが、ここで提起された問題の解決策を見つけたいと思っている本当の理由です。
c++ - 以下のブースト バリアント ビジター コードが機能しない理由
私は構造体Aを持っています:
私のブーストバリアントは次のとおりです。
私の訪問者ファンクターは次のように定義されています。
上記を実行すると、次のようなエラーが表示されます。
なぜこれが起こっているのか分かりません。
私が使用しているブーストバージョンは107200です
前もって感謝します。