У меня есть класс, который Point
-для ради simplicity- выглядит следующим образом:Как передать вектор из класса в функцию?
template<class DivisionSpace>
class Point {
public:
typedef typename DivisionSpace::FT FT;
const std::vector<FT>* get_coords() const {
return &coords;
}
private:
std::vector<FT> coords;
};
Теперь я хочу в основном, чтобы передать вектор этого класса в функцию, которая ожидает std::vector<FT>& q
. Я передаю ссылку, чтобы избежать копирования. Я мог бы использовать указатель, но это означало бы, что мне нужно изменить многие строки кода (из-за структуры проекта).
Как это сделать? Может быть, какой-нибудь «трюк» с C++ 11?
EDIT
Вот прототип функции:
void search_nn_prune(std::vector<FT>& q,
std::vector<std::pair<float, int> >& res,
int max_leaf_check, bool sorted_results = false, int k =
1,
float epsilon = 0) {
В основной я
std::vector< Point<Division_space> > q;
std::vector<std::vector<std::pair<float, int> > > results(Q);
for(int i = 0; i < Q; ++i) {
const std::vector<FT>* query = q[i].get_coords();
kdf.search_nn_prune(query, results[i], max_leaf_check, false, k, epsilon);
}
и здесь ошибка
error: no matching function for call to ‘Random_kd_forest<Division_Euclidean_space<int> >::search_nn_prune(const std::vector<int, std::allocator<int> >*&, std::vector<std::pair<float, int> >&, int&, bool, int&, float&)’
note: candidates are:
note: void Random_kd_forest<DivisionSpace>::search_nn_prune(std::vector<typename DivisionSpace::FT>&, std::vector<std::pair<float, int> >&, int, bool, int, float) [with DivisionSpace = Division_Euclidean_space<int>, typename DivisionSpace::FT = int]
note: no known conversion for argument 1 from ‘const std::vector<int, std::allocator<int> >*’ to ‘std::vector<int, std::allocator<int> >&’
note: void Random_kd_forest<DivisionSpace>::search_nn_prune(size_t, std::vector<std::vector<std::pair<float, int> > >&, int, bool, int, float) [with DivisionSpace = Division_Euclidean_space<int>, size_t = unsigned int]
note: no known conversion for argument 2 from ‘std::vector<std::pair<float, int> >’ to ‘std::vector<std::vector<std::pair<float, int> > >&’