упаковать несколько объектов C ++ и перейти к функции [closed]

0

Я использую библиотеку ac для интеграции, где подынтегральное выражение объявлено как fun (..., void * fdata,...)

который использует * указатель fdata для передачи внешних переменных, однако, прежде чем выполнять численное интегрирование, мне нужно

интерполировать необработанные данные с помощью других библиотек c++, возвращая некоторые интерполирующие объекты класса,

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

  • 2
    Вы должны уточнить, что вы пытаетесь сделать. Детали имеют значение.
  • 0
    Комментарий juanchopanza действителен - чтобы дать вам лучшее представление о том, что важно, вы можете сказать нам, пытаетесь ли вы пропустить много объектов одного типа? Почему вы используете void* s, а не шаблонизируете параметры функции или не используете указатели на базовый класс. Почему вы поставили метку "С" на вопрос?
Показать ещё 1 комментарий
Теги:
numerical

1 ответ

1

Вы можете использовать структуру и передать указатель на нее, но мне кажется, что у вас нет фиксированного количества объектов для передачи, и, следовательно, объект, агрегирующий другие динамически, будет лучше соответствовать вашим потребностям, поэтому вы можете использовать std::vector и передать его адрес как параметр func fdata.

Пример:

#include <vector>
#include <iostream>

using namespace std;

class C //Mock class for your objs
{
public:
  C(int x)
  {
    this->x = x;
  }
  void show()
  {
    cout << x << endl;
  }
private:
  int x;
};

void func(void *fdata) //Your function which will recieve a pointer to your collection (vector)
{
  vector <C *> * v = (vector<C *> *)fdata; //Pointer cast
  C * po1 = v->at(0);
  C * po2 = v->at(1);
  po1->show();
  po2->show();
}


int main()
{
  vector<C *> topass;
  topass.push_back(new C(1)); //Create objects and add them to your collection (std::vector)
  topass.push_back(new C(2));
  func((void *)(&topass)); //Call to func
  for(vector<C *>::iterator it = topass.begin(); it != topass.end(); it++)
      delete(*it);
}
  • 0
    Почему бы не использовать func(const std::vector<C*>& fdata) или `` func (const std :: vector <void *> & fdata) `при необходимости - и избегать дополнительного приведения?
  • 0
    @TonyD Поскольку я понимаю, что функция OP fdata обязательно void * В противном случае, предложенное вами объявление лучше.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню