Я новичок в шаблонах C++, и я пытаюсь написать функцию, которая возвращает chrono :: duration с указанной единицей времени и типом. Например, эта строка дает мне разницу во времени в секундах как двойную:
std::chrono::duration<double> secd =
std::chrono::duration_cast<std::chrono::duration<double,std::ratio<1>>>(end - start);
У меня есть функция класса, которая дает мне продолжительность времени, и я хотел бы использовать шаблоны для указания типа и единицы для возвращаемого значения (в предыдущем примере это было бы double и ratio <1>). То, что я хотел бы иметь, похоже на этот псевдокод:
template typename<class T, class R> std::chrono::duration<T, R> getStepTime() {
return std::chrono::duration_cast<std::chrono::duration<T, R>>(_time);
}
где _time
- член класса с продолжительностью. Все мои попытки до сих пор даже не собирались.
Если есть лучший способ достичь этого, не используя шаблоны, я все уши.
Плохое использование typename
и отсутствующее закрытие >
в вашем шаблоне. Вот скриншоты для тестирования компиляции:
template <typename T, typename R>
std::chrono::duration<T, R> getStepTime()
{
std::chrono::duration<T, R> duration;
return std::chrono::duration_cast<std::chrono::duration<T, R>>(duration);
}
Плохое использование ключевого слова typename
; пытаться
template<typename T, typename R>
std::chrono::duration<T, R> getStepTime(Step step) {
return
std::chrono::duration_cast<std::chrono::duration<T, R>>(_time);
}
но вы должны показать больше кода. Ваш пример слишком мал, чтобы быть даже проверенным.