Я пишу оболочку COM для объекта COM, который отправляет различные типы значений от клиента и хочет сопоставить эти типы в Map с их фактическим типом C ++, таким как VT_BSTR, с wstring и т. Д.
Я думал о том, чтобы определить перечисление всех типов COM-вариантов, а затем использовать карту, чтобы использовать этот Enum в качестве ключа и фактический тип, содержащий извлеченное значение, однако я сталкиваюсь с проблемой, которую не могу найти глобальный тип для размещения на моей карте, который я могу привести к строковому или двойному типу или тому, что мне вручают для размещения на карте.
Возможно, мои мысли о том, как это сделать, совершенно неверны, пожалуйста, совет?
Я думал о пустом указателе, однако кажется, что компилятору не нравятся мои приведения:
(пример)
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 внутри, чтобы найти правильный тип, я не уверен, что есть лучший способ?