我想测试一个类函数,它只需要一个std :: function作为参数并将它传递给另一个类。在我的测试中,它被传递给一个模拟对象。
在我的测试文件中,我创建了一个lambda并将其提供给要测试的函数。
现在我的问题是,我如何检查,如果我在模拟对象中收到的lambda仍然像我放弃的那样。是否有办法?
答案 0 :(得分:0)
所以据我所知,问题在于你无法检查std::function
对象是否仍然相同。不幸的是,没有简单的方法。
std :: function中没有相等运算符。可以在旧tr1::function
N1667:
operator==
对于C ++语言中的tr1::function
是无法实现的,因为我们没有可靠的方法来检测给定类型T是否是没有用户帮助的Equality Comparable
一种方式(您已经知道)是通过引用传递函数对象并比较地址。这不是一个好的解决方案,因为函数对象很容易复制。
另一个解决方案是将函数对象包装在另一个存储函数的对象中,并为其分配一个id。
以下内容: Using shared_ptr for unique ownership (kind of) - is this good practice?
您的'包装器对象'可以从HandleBased和std::function
继承。这样您就可以简单地比较键。
希望我能帮忙......
答案 1 :(得分:0)
如何查看typeid
?
#include <functional>
#include <iostream>
#include <typeinfo>
#include <iomanip>
std::function<void()> foo(std::function<void()> x){
return x;
}
std::function<void()> bar(std::function<void()>){
return []{};
}
int main(){
int x = 5;
auto l = [x](){return x;};
std::cout << std::boolalpha;
std::cout << (foo(l).target_type()==typeid(l)) <<' ';
std::cout << (bar(l).target_type()==typeid(l));
}