C++11 时间点模持续时间不编译
环境:win7,visual 2013 x64 给定一个C++11 时间点模持续时间不编译,c++11,visual-studio-2013,modulo,chrono,C++11,Visual Studio 2013,Modulo,Chrono,环境:win7,visual 2013 x64 给定一个std::chrono::system\u clock::time\u point tp,和一个std::chrono::system\u clock::dur,如何找到下一个std::chrono::system\u clock::time\u point tp2: tp2 = tp - tp % dur + dur 这表示考虑时钟和心跳的下一个时间点,例如dur=10s 我试了很多。。。我想我最好的答案是: using namesp
std::chrono::system\u clock::time\u point tp
,和一个std::chrono::system\u clock::dur
,如何找到下一个std::chrono::system\u clock::time\u point tp2
:
tp2 = tp - tp % dur + dur
这表示考虑时钟和心跳的下一个时间点,例如dur=10s
我试了很多。。。我想我最好的答案是:
using namespace std; // for better readability
template < class duration_t >
system_clock::time_point next_time_aligned_on(const system_clock::time_point & tp, const duration_t & step)
{
const system_clock::duration d = tp.time_since_epoch();
const auto step2 = duration_cast<system_clock::duration>(step);
const auto elapsed_since_last = d % step2;
return tp - elapsed_since_last + step;
}
使用命名空间std;//为了更好的可读性
模板<课程持续时间>
系统时钟::时间点下一个时间点对齐(常数系统时钟::时间点和tp、常数持续时间和步长)
{
常量系统时钟::持续时间d=tp.time_自_epoch()起;
const auto step2=持续时间(步长);
自上次运行以来的常数自动运行时间=d%step2;
返回tp-自上次+步骤以来经过的\u;
}
我总是遇到同样的编译错误:
1>C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC
\include\type_traits(1446): error C2446: ':' : no conversion from
'std::chrono::duration<std::chrono::system_clock::rep,std::chrono::system_clock::period>'
to 'std::chrono::system_clock::rep'
1> No user-defined-conversion operator available that can perform
this conversion, or the operator cannot be called
1> C:\trading\tepp\src\tepp/tools/strings.h(49) : see reference
to class template instantiation std::common_type<std::chrono::system_clock::rep,std::chrono::duration<std::chrono::system_clock::rep,std::chrono::system_clock::period>>'
being compiled
1> st_gammalong.cpp(30) : see reference to function template
instantiation 'std::chrono::system_clock::time_point
tepp::next_time_aligned_on<std::chrono::seconds>(const std::chrono::system_clock::time_point &,const duration_t &)'
being compiled
1> with
1> [
1> duration_t=std::chrono::seconds
1> ]
1>C:\ProgramFiles(x86)\Microsoft Visual Studio 12.0\VC
\include\type_traits(1446):错误C2446:':':没有从
'std::chrono::duration'
至“std::chrono::system_clock::rep”
1> 没有可执行的用户定义的转换运算符
无法调用此转换或运算符
1> C:\trading\tepp\src\tepp/tools/strings.h(49):参见参考
到类模板实例化std::common_type'
正在编辑
1> st_gammalong.cpp(30):参见函数模板参考
实例化'std::chrono::系统时钟::时间点
tepp::下一次校准时间(常数标准:时钟:系统时钟:时间点和常数持续时间)
正在编辑
1> 与
1> [
1> 持续时间=标准::计时::秒
1> ]
我的问题:如何在c++11 std::chrono中使用模运算符?这可能与聪明的代码有关,在clang/libc++上对我有效。很好!也适用于GCC(需要添加“使用命名空间chrono;”)