Нет экземпляра конструктора при попытке сделать функцию для хроно в C ++ - PullRequest
1 голос
/ 08 марта 2020

Мне нужно рассчитать время выполнения моих алгоритмов. Для этого я использую следующую структуру:

auto start = std::chrono::stedy_clock::now();
//code
auto end = std::chrono::stedy_clock::now();
auto diff = end - start;
std::cout << std::chrono::duration <double, std::milli> (diff).count() << " ms" << endl;

Однако, поскольку у меня есть несколько алгоритмов, которые мне нужно проверить, я решил сделать следующие функции:

std::chrono::time_point<std::chrono::steady_clock> time_now()
{
    return std::chrono::steady_clock::now();
}

void print_time(std::ostream& out, std::chrono::_V2::steady_clock differnce)
{
    out << std::chrono::duration <double, std::micro> (differnce).count() << std::endl;
}

Я получаю Следующая ошибка из vscode для моей функции печати:

no instance of constructor "std::chrono::duration<_Rep, _Period>::duration [with _Rep=double, _Period=std::micro]" matches the argument list -- argument types are: (std::chrono::_V2::steady_clock)

Есть идеи, почему у меня возникла эта проблема и как я могу ее решить?

Спасибо!

1 Ответ

0 голосов
/ 08 марта 2020

Вы передаете неправильный тип вашей функции print_time. Функция объявляется, но когда вы передаете в нее свою продолжительность, компилятор пытается преобразовать duration в clock, что не имеет смысла, поэтому вы получаете это сообщение конструктора.

Некоторые типы времени:

  • clock(s) различные вещи, которые мы можем запросить для уточнения c time_points с now()
  • time_points представляет определенный c момент времени.
  • duration разница между time_points

Это должно быть так:

void print_time(std::ostream& out,
  std::chrono::duration<double, std::micro> delta)
{
    out << delta.count() << std::endl;
}
...