Как использовать std :: chrono :: milliseconds в качестве параметра по умолчанию - PullRequest
0 голосов
/ 06 ноября 2019

Сценарий
У меня есть функция C ++, которая принимает параметр как std::chrono::milliseconds. Это в основном значение тайм-аута. И это параметр по умолчанию, установленный в какое-то значение по умолчанию.

Код

#include <iostream>
#include <chrono>

void Fun(const std::chrono::milliseconds someTimeout = std::chrono::milliseconds(100)) {
    if (someTimeout > 0) {
        std::cout << "someNumberInMillis is: " << someNumberInMillis.count() << std::endl;
    }
}

int main() {
    unsigned int someValue = 500;
    Fun(std::chrono::milliseconds(someValue))
}

Выпуск
Все вышеперечисленное являетсяхорошо, но когда я вызываю Fun со значением, то не удается скомпилировать, и я получаю следующую ошибку:

Нет жизнеспособного преобразования из 'bool' в 'std :: chrono :: milliseconds' (aka 'duration>')

Вопрос:
Что я здесь не так делаю? Я хочу, чтобы вызывающий Fun явно знал, что он использует std::chrono::milliseconds, когда вызывает Fun. Но компилятор не позволяет использовать std::chrono::milliseconds в качестве параметра?

Как использовать std::chrono::milliseconds в качестве параметра по умолчанию?

Environment
Compilerиспользуется лязг на macOS High Sierra

1 Ответ

1 голос
/ 06 ноября 2019

С исправлением других синтаксических ошибок это компилируется без предупреждений в GCC 9:

#include <iostream>
#include <chrono>

void Fun(const std::chrono::milliseconds someNumberInMillis
                                         = std::chrono::milliseconds(100))
{
    if (someNumberInMillis > std::chrono::milliseconds{0}) {
        std::cout << "someNumberInMillis is: " << someNumberInMillis.count()
                  << std::endl;
    }
}

int main()
{
    unsigned int someValue = 500;
    Fun(std::chrono::milliseconds(someValue));
}
...