Отказ от ответственности: Мой C ++ ржавый, и я никогда раньше не использовал curlpp, поэтому приведенному ниже коду может потребоваться немного помассировать.загрузки.Поскольку curlpp не дает вам этого, вам, вероятно, нужно использовать функтор.Итак, для вашего обратного вызова, сделайте класс, похожий на:
class ProgressCallback
{
public:
ProgressCallback(int index) : downloadIndex(downloadIndex)
{
}
double operator()(double dltotal, double dlnow, double ultotal, double ulnow)
{
double progress = (dlnow/dltotal) * 100;
std::ostringstream strs;
float percent = floorf(progress * 100) / 100;
strs << percent;
printf("%d: %s\t%d\t%d\t%d\t%d\n", downloadIndex,
strs.str().c_str(),dltotal, dlnow, ultotal, ulnow);
return 0;
}
private:
int downloadIndex;
};
Теперь вы должны использовать это как:
ProgressCallback callback1(1);
curlpp::options::ProgressFunction progressBar(callback1);
Конечно, вам нужно подуматьо времени жизни этих функторов обратного вызова.Вероятно, оставлять их в стеке было бы плохой идеей.
РЕДАКТИРОВАТЬ: Кажется, есть более простой способ сделать это.в utilspp/functor.h
определены две шаблонные функции: make_functor () и BindFirst ().Таким образом, вы можете просто добавить downloadIndex
параметр к вашему ProgressCallback
:
double ProgressCallBack(int dlIdx,
double dltotal, double dlnow,
double ultotal, double ulnow);
и зарегистрироваться как:
curlpp::options::ProgressFunction
progressBar(BindFirst(make_functor(ProgressCallback), 1));