Я написал обобщенный класс таймера c, который использует время std::chrono
для таймера. Это пример кода, который показывает проблему:
#include <iostream>
#include <chrono>
template <typename Rep, typename TimeType>
class Timer {
public:
Timer(const std::chrono::duration<Rep, TimeType> timerLength);
~Timer() = default;
private:
std::chrono::duration<Rep, TimeType> _timerLength;
};
template <typename Rep, typename TimeType>
Timer<Rep, TimeType>::Timer(const std::chrono::duration<Rep, TimeType> timerLength) : _timerLength{timerLength} {}
int main()
{
constexpr int time_ms = 1000;
Timer timer(std::chrono::milliseconds(time_ms));
return 0;
}
Этот код приводит к ошибке: error: deduced class type ‘Timer’ in function return type
.
Эту ошибку можно устранить, поместив фактическое значение int непосредственно в таймер. в основном:
Timer timer(std::chrono::milliseconds(1000));
Кроме того, эту ошибку можно устранить, приведя параметр time_ms
к целому числу:
Timer timer(std::chrono::milliseconds(`static_cast<int>(time_ms)));
Я ожидал того же результата от целочисленной переменной и приведения целое число - целое число.
Эту ошибку нельзя устранить, удалив constexpr
переменной time_ms
.
Мой вопрос: в чем различия между целочисленной переменной и приведением целое число в целое число (а также вставка числа непосредственно в std::chrono::milliseconds()
)? И почему это имеет значение в первую очередь?