我有一个简单的模板秒表计时器,我计划在我的下一个项目中使用它,每当我使用"Timer< float >“实例化这个类时,一切都可以正常工作,但是如果我使用"Timer< int >”,则会出现错误。
H(18):错误C2440:'‘:无法从'std::chrono::duration<_Rep,_Period>’转换为'std::chrono::duration<_Rep,_Period>‘
我不知道为什么会发生这种事,所有的帮助都很感激,谢谢!
template< typename type
我正在用std::chrono编写一个标准的游戏循环。我需要将一个浮点传递给我的呈现方法,它表示我离下一个帧有多远。为了计算数字,我使用了chrono::工期的count()方法,因此我需要将两个持续时间转换为相同的比率。
void engine::run() {
using namespace std::chrono;
using updates = duration<steady_clock::rep, std::ratio<1, 40>>;
using common = std::common_type<updates, steady_clock
我使用的是VS2012,下面的示例有问题:
#include <chrono>
#include <thread>
int main()
{
// doesn't compile and I don't understand why:
std::this_thread::sleep_for(std::chrono::duration<double>(0.1));
// I can use this but still I would like to know the reason:
std::this_th
考虑到std::chrono::duration可以表示两次之间的有符号差异,需要这样一个持续时间的绝对值似乎是非常常见的情况。例如,以下代码按预期输出diff: -5:
using namespace std;
using namespace std::chrono;
auto now = system_clock::now();
auto then = now - seconds(5);
auto diff = then - now;
cout << "diff: " << duration_cast<seconds>(diff).c
当我们使用std::chrono::duraction_cast时,我们编写如下内容:
auto int_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1);
在类型参数中,我们只给出一种类型。但是duration_cast的定义是:
template <class ToDuration, class Rep, class Period>
constexpr ToDuration duration_cast(const duration<Rep,Period>& d
我注意到了意想不到的行为,并将其范围缩小到从一个持续时间转换到另一个持续时间。
#include <chrono>
#include <iostream>
#include <cmath>
using sec = std::chrono::seconds;
using fsec = std::chrono::duration<float>;
using dsec = std::chrono::duration<double>;
template<typename T>
auto count_intervals(T ti
这个代码适用于GCC和Clang。在MSVC中,当使用自定义类型而不是std::chrono::fine时,它工作得很好。当使用operator+ over operator*时,它工作得很好。2018年前的MSVC,而不是2017/2015的MSVC,效果很好。
我遗漏了什么明显的东西吗,还是仅仅是MSVC中的一个bug?
为了完整起见,下面是上面链接中的测试用例:
#include <chrono>
namespace A {
class Foo {
public:
int mCount;
constexpr explicit
我有以下特征要检测两种类型是否可除,否则返回结果操作类型或另一种Default类型:
struct default_t { };
// Overloaded template for fallbacks
template <class U, class V>
default_t operator/(U, V);
// If the expression std::declval<U>()/std::declval<V>() is valid,
// gives the return type, otherwize provide Default.
tem
如何继续将std::chrono::minutes::rep类型值转换为小时表示。
#include <iostream>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main() {
minutes::rep time = 4;
std::cout << time; // outputs as minutes, need in hours
// duration cast doesn't seems to work h
我正在使用OpenCV编写一个视频文件。要使cv::VideoWriter正确工作,对write()函数的调用必须准确地每秒发生30次(对于30 has视频)。我找到了代码,它使用boost库来实现这一点。我想做同样的事情,但是在我的程序中使用std::chrono。这就是我的实现:
std::chrono::high_resolution_clock::time_point prev = std::chrono::high_resolution_clock::now();
std::chrono::high_resolution_clock::time_point current = pre
在下面的示例中,使用std::chrono库,我正在寻找一种方法来接受基本计时器的持续时间类型。
template <std::chrono::duration D> //Accept either std::chrono::minute, second, etc...
class myTimer{
}
然而,这将不能工作,因为持续时间不符合模板关键字的标准。
template <class T>
class myTimer{
//I could do a static cast, but Duration is only a template used b