クライアントからさまざまな型の値を送信する COM オブジェクトの COM ラッパーを作成しており、Map 内のこれらの型を実際の C++ 型 (VT_BSTR から wstring など) にマップしたいと考えています。
すべての COM Variant 型の列挙を定義し、マップを使用してその列挙型をキーとして、取得した値を含む実際の型を使用することを考えていましたが、グローバル型が見つからないように見えるという問題に直面していますマップに配置するために渡された文字列または double などにキャストできるマップに配置します。
おそらく、これを行う方法についての私の考えは完全に間違っています。アドバイスをお願いします。
私は void ポインターを考えていましたが、コンパイラーは私のキャストを好まないようです:
(例)
enum Type
{
VT_INTEGER=0,
VT_DBL=1
};
map<Type, void*> typemap;
typedef pair<Type, void*> m_typepair;
typemap.insert( m_typepair(VT_INTEGER, 0));
typemap.insert( m_typepair(VT_DBL, (double)2.5)); // it does not like this cast
map<Type, void*>::iterator m_typeiter;
このマップを反復するには、適切なタイプを見つけるために内部に switch ステートメントが必要になる可能性があります。より良い方法があるかどうかはわかりません。