Любой быстрый способ конвертировать std :: vector в CComSafeArray

Есть ли быстрый способ конвертировать std :: vector в CComSafeArray. В настоящее время я пишу кусок кода, который в основном преобразует вектор 5 или 6 в CComSafeArray (не в итерации). В котором появляется большой блок кода (освободите старое пространство, создайте новый сейф, скопируйте). Я действительно надеюсь, что смогу преобразовать это легко.

Поскольку мы можем написать метод для этого преобразования, я на самом деле ищу полезную функцию, лежащую в углу библиотек и т. Д. Большое спасибо за вашу помощь!

1

Решение

Это должно скопировать содержимое вектора непосредственно в базовый SAFEARRAY, предполагая, что это простые типы или указатели.

vector<T> vecInput;

// Create a SAFEARRAY of size elements
CComSafeArray<T> sa(vecInput.size());

// Copy all the contents into the SAFEARRAY
memcpy(&sa.GetSafeArrayPtr()->pvData[0], &vecInput[0], sizeof(T) * vecInput.size());

Если вы ищете обобщенное решение, итерация по вектору также работает:

vector<T> vecInput;

// Create a SAFEARRAY of size elements
CComSafeArray<T> sa(vecInput.size());

// Copy all the contents into the SAFEARRAY
for (size_t i = 0; i < vecInput.size(); ++i)
sa.SetAt(i, vecInput[i]);

Если вы хотите использовать алгоритмы STL, есть хотя бы одно решение, которое предоставляет STL-совместимые итераторы поверх SAFEARRAY после чего вы можете позвонить CComSafeArray::Attach назначить SAFEARRAY для CComSafeArray.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector