我已阅读不同的方法HOWTO在这里stackflow测量功能的时间。我希望能够调用timemeasure功能为我的程序的所有功能,并写了一个小的辅助类:
// helper.h
class Helper
{
public:
Helper();
~Helper();
template<class F, typename...Args>
double funcTime(F func, Args&&... args);
};
// helper.cpp:
#include "Helper.h"
#include <chrono>
#include <utility>
typedef std::chrono::high_resolution_clock::time_point TimeVar;
#define duration(a) std::chrono::duration_cast<std::chrono::milliseconds>(a).count()
#define timeNow() std::chrono::high_resolution_clock::now()
template<typename F, typename... Args>
double Helper::funcTime(F func, Args&&... args)
{
TimeVar t1 = timeNow();
func(std::forward<Args>(args)...);
return duration(timeNow() - t1);
}
相同的代码工作完美的,如果你在同一个类中调用它,但会产生,如果我与main.cpp中称之为LNK2019错误。我们的目标是包装这个功能的话,我可以用我的任何功能调用它。我在做什么错在这里?
// main.cpp
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include "Helper.h"
using namespace std;
int countWithAlgorithm(string s, char delim) {
return count(s.begin(), s.end(), delim);
}
int main(int argc, const char * argv[])
{
Helper h;
cout << "algo: " << h.funcTime(countWithAlgorithm, "precision=10", '=') << endl;
system("pause");
return 0;
}
谢谢你都在正确的方向指向我。我知道有关的事实,大多数编译器不能实例化模板的功能,但不知道如何避免这种情况。 tntxtnt评论帮我找到在合并helper.h的解决方案:
//helper.h
//
#pragma once
#include <chrono>
typedef std::chrono::high_resolution_clock::time_point TimeVar;
#define duration(a) std::chrono::duration_cast<std::chrono::nanoseconds>(a).count()
#define timeNow() std::chrono::high_resolution_clock::now()
class Helper
{
public:
Helper();
~Helper();
template<class F, typename...Args>
double funcTime(F func, Args&&... args)
{
TimeVar t1 = timeNow();
func(std::forward<Args>(args)...);
return duration(timeNow() - t1);
}
};
我感谢你的快速帮助!