我想要一個函數來接受持續時間,以任何單位對調用者有意義。接受std :: chrono ::任何表示/期間的持續時間
例如:
transition->after(chrono::seconds(3));
transition->after(chrono::milliseconds(500));
transition->after(chrono::hours(1));
將這個after
功能的有效簽名是什麼樣的?我可以避免使它成爲模板功能嗎?
我想要一個函數來接受持續時間,以任何單位對調用者有意義。接受std :: chrono ::任何表示/期間的持續時間
例如:
transition->after(chrono::seconds(3));
transition->after(chrono::milliseconds(500));
transition->after(chrono::hours(1));
將這個after
功能的有效簽名是什麼樣的?我可以避免使它成爲模板功能嗎?
有幾個常見選項
1)使用模板。這具有沒有轉換的優點,但需要使用模板,這可能是不可能的。例如,如果這是虛擬功能的接口。
template<typename Rep, typename Period>
void after(std::chrono::duration< Rep, Period > t);
2)使用整數表示形式,以及界面所需的最低週期。例如,如果您的功能實際上只需要納秒,那麼您可以直接使用它。如果不會發生精度損失,這將隱式轉換爲納秒。您可以使用預先定義的,或明確將其指定爲持續時間
void after(std::chrono::nanoseconds t) ;
3)使用雙表示,如果精度不是問題,這可能是有用的部分指定其他時間段,但接受所有投入的能力是。這將隱式轉換任何持續時間,因爲所有時間段都允許轉換爲浮點類型。例如,如果你想要雙精度秒,你會做
void after(std::chrono::duration<double> t);
非常感謝您的出色答覆。你的第二個建議對我很好。毫無疑問,其他人也將從這種選擇中受益,並找到滿足其需求的最佳方法。 –
我會說只是接受無論你在內部使用,並讓'duration'做轉換。 –