2016-01-19 2 views
-3

У меня есть приложение на C++ (назовем его «client»), который широко использует двойные указатели для хранения и передачи массивов между его функциями и несколькими DLL.Передача указателя указателя на std :: vector function

Мне нужно интегрировать это с библиотекой C++, которая вместо этого предоставляет аргументы функции как std :: vector. Мне хорошо известно, что самым «чистым» ответом было бы переписать клиент для замены указателей векторами, но на данный момент это не вариант.

Например, это одна из функций, предоставляемых библиотекой:

EXPORT void* swt(vector<double> &, int , string , vector<double> &, int &); 

и это одна из двойных указателей мне нужно передать в качестве первого аргумента функции выше:

double* TSF_MAD = (double*)malloc(DatasetsCount*sizeof(double)); 

Я попытался как следующее, но и поднять ту же ошибку (C2664):

swt(TS, TSLen, "Test", TS, d); 
swt(&TS[0], TSLen, "Test", &TS[0], d); 

Любая помощь с благодарностью

+3

Не добавляйте теги, потому что письмо соответствует! C и C++ - это разные языки! – Olaf

+3

О нет, не 'malloc'. – erip

+1

использовать 'новый' оператор в C++ вместо' malloc' –

ответ

1

Вы не можете передать указатель на функцию, которая ожидает вектор. Вам нужно передать вектор. Если у вас есть указатель на массив объектов, вы можете скопировать данные в вектор, а затем передать этот вектор функции.

auto v = std::vector<double>(TSF_MAD, TSF_MAD + DatasetsCount); 

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

Смежные вопросы