Оператор преобразования не работает с sleep_until - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь использовать пользовательский класс с оператором преобразования при вызове std::this_thread::sleep_until.Вот код, который я использую:

class A
{
public:
    ...
    operator std::chrono::time_point<std::chrono::system_clock>() const {
        return std::chrono::time_point<std::chrono::system_clock>{} +
               std::chrono::duration_cast<std::chrono::system_clock::duration>(timestamp_); }
private:
    std::chrono::nanoseconds timestamp_;
};

A a;
std::this_thread::sleep_until(a); // This doesn't compile (note the overload with time_point).
std::this_thread::sleep_until((std::chrono::time_point<std::chrono::system_clock>)a); // But this does.

Ошибка компилятора error C2664: 'void std::this_thread::sleep_until(const xtime *)': cannot convert argument 1 from 'A' to 'const xtime *'.

Может кто-нибудь дать мне подсказку, что я делаю здесь неправильно и как это должно быть сделано правильно

1 Ответ

0 голосов
/ 25 октября 2018

std::this_thread::sleep_until - это шаблон функции.При выводе аргумента шаблона преобразование не будет учитываться.

Преобразование происходит после вычета .Таким образом, ваш оператор преобразования не действует, если вы не вызываете его явно.

...