Я пытаюсь создать struct timeout
.Я хотел бы использовать его напрямую. Например, std::this_thread::sleep_for(timeout)
.Однако мое преобразование, определенное пользователем, не выполняется при преобразовании из struct timeout
в std::chrono::duration<rep,period>
по какой-то причине, которую я не могу понять.Вот полный пример кода:
#include <chrono>
#include <thread>
template <typename Duration = std::chrono::milliseconds>
struct timeout_tp
{
using Duration_ = Duration;
using rep_ = typename Duration_::rep;
using period_ = typename Duration_::period;
timeout_tp(const rep_ &timeout) : timeout{timeout} {}
operator Duration_() const {return timeout;}
Duration_ operator()() const {return timeout;}
//...
private:
Duration_ timeout;
};
int main()
{
timeout_tp<std::chrono::seconds> timeout{1};
std::chrono::seconds x = timeout; //OK: struct timeout conversion to std::chrono::seconds.
std::this_thread::sleep_for(x);
//std::this_thread::sleep_for(timeout); : FAILS!!! Can't understand why...
std::this_thread::sleep_for(timeout()); //OK : struct timeout operator() returns std::chrono::seconds.
return 0;
}
Что я делаю не так?
Что мне нужно сделать, чтобы использовать нужный синтаксис?
Сообщения об ошибках, выданныекомпилятор:
main.cpp: 38: 39: ошибка: нет соответствующей функции для вызова 'sleep_for (timeout_tp <> &)' std :: this_thread :: sleep_for (timeout);// FAILS !!!Не могу понять, почему ... ^
В файле из main.cpp: 16: 0: / usr / include / c ++ / 7 / thread: 361: 7: примечание: кандидат: шаблон void std:: this_thread :: sleep_for (const std :: chrono :: duration <_Rep1, _Period1> &) sleep_for (const chrono :: duration <_Rep, _Period> & __rtime) ^ ~~~~~~~~ / usr / include /c ++ / 7 / thread: 361: 7: примечание: ошибка вывода / замены аргумента шаблона:
main.cpp: 38: 39: примечание: timeout_tp <> 'не является производным от const std :: chrono:: длительность <_Rep1, _Period1> 'std :: this_thread :: sleep_for (timeout);// FAILS !!!Не могу понять, почему ...