是否有可能編寫可被用於測量操作者的其它功能的時間,以及是這樣的函數:
// pass an operator as an argument
measureTime(MyClass::operator*, lhs, rhs);
// Pass a function as an argument
measureTime(MyFunction(arg1, arg2));
// or
measureTime(MyFunction, arg1, arg2);
// or other signatures ...
我碰到一個函數模板來做到這一點:
template<typename F, typename... Args>
double measureTime(F func, Args&&... args){
auto t1 = high_resolution_clock::now();
func(std::forward<Args>(args)...);
return high_resolution_clock::now() - t1;
}
不知道如何使用這個(或寫一個新的函數)來衡量超載運營商的時間。
問題
- 什麼是做到這一點(如果可能的話)的最好方法?
- 如果不可能,還有其他選擇嗎?
例
我寫的大整數運算庫,我使用不同的算法和想測量(和比較)的時間(看看他們的行爲)通過不同長度的整數時, ...
這是我的課的一部分:
class bigint {
public:
int compare(const bigint& other) const;
bigint operator*(const bigint& rhs) const;
bigint& operator++();
bigint otherAlgorithms(const bigint& other) const;
// and more ...
}
我也有很多的輸入數據,並想通過那些在for
循環內的數據並打印出時間。
這就是爲什麼我在尋找一個通用的函數,可以打印任何函數/操作符的時間。
如果使用'的std :: invoke'而不是自己這個調用該函數應與成員的工作職能 - – tkausl
除非'MyFunc'返回一個函數,傳遞'MyFunction的(ARG1,ARG2)'將結果傳遞表達式 – Vivick
運算符仍然是一個函數,所以傳遞它應該沒有問題。像'運營商<<(a,b)' – AndyG