所以我有一个名为 timer 的结构,它确定一段代码执行和完成所花费的时间,我将对我的排序算法运行一些基准测试,并取每次排序所花费时间的平均值算法。
struct Example{
std::chrono::time_point<std::chrono::steady_clock> start, end;
Example() {
start = std::chrono::high_resolution_clock::now();
}
~Example() {
end = std::chrono::high_resolution_clock::now();
std::chrono::duration<float> duration = end - start;
float ms = duration.count() * 1000.0f;
std::cout << ms << " miliseconds\n";
// a way to return ms?
}
};
但是,我无法找到一种方法从析构函数中取出变量 ms 并在测量时间后将其分配给某些东西。有什么方法可以解决这个问题,或者我可以用更好的方式编写我的结构吗?
最佳答案
您不能从析构函数返回任何内容,但您可以将值分配给您在创建时提供给 Example
的变量。示例:
#include <chrono>
#include <iostream>
template <class Clock = std::chrono::steady_clock>
struct Example {
std::chrono::time_point<Clock> start;
std::chrono::duration<float>& duration; // a reference
Example(std::chrono::duration<float>& dur) : // take the duration as an argument
start(Clock::now()),
duration(dur)
{}
~Example() {
auto end = Clock::now();
duration = end - start; // assign the value
}
};
int main() {
std::chrono::duration<float> duration;
{
Example<> x(duration);
}
std::cout << duration.count() << '\n'; // read it afterawrds
}
https://stackoverflow.com/questions/72338886/