如何正确实例化C++ Boost库的boost::posix_time::seconds类?
Boost::posix_time::seconds类实例化编译错误解决方案
错误原因
从你贴出的seconds类定义可以看到,它的模板构造函数加了boost::enable_if<boost::is_integral<T>>约束,意思是只接受整数类型的入参。你传入的60.0是double浮点类型,不满足类型约束,因此编译器找不到匹配的构造函数,触发报错。
正确实例化方法
- 仅需要整秒时长:直接传入整数类型参数即可,无需使用浮点数,注意原代码这行末尾缺少分号,补全后即可正常编译:
timer.expires_from_now(boost::posix_time::seconds(60)); - 需要带小数的秒数(比如60.5秒):不要使用
seconds类,改用更细粒度的时长类:// 用毫秒表示,60.5秒 = 60500毫秒 timer.expires_from_now(boost::posix_time::milliseconds(60500)); // 也可以直接构造time_duration对象,参数依次是时、分、秒、微秒 timer.expires_from_now(boost::posix_time::time_duration(0, 0, 60, 500000)); - 必须传入浮点类型的场景:显式转换为整数类型即可,注意小数部分会被截断:
timer.expires_from_now(boost::posix_time::seconds(static_cast<long>(60.0)));
内容的提问来源于stack exchange,提问作者Astra Uvarova - Saturn's star
相关产品推荐
相关产品推荐

