我正在为一堂课写一些测试。我有多个测试,每个测试都创建自己的MyObj
。但是,MyObj
接受std::function<bool<T>>
,我不想在每次创建MyObj
时创建具有相同功能的lambda函数。所以不要这样:
TEST1()
{
MyObj<double> myobj([&](double time) -> bool
{
time = myobj.doSomething();
// ... more functionality
});
}
TEST2()
{
MyObj<double> myobj([&](double time) -> bool
{
time = myobj.doSomething();
// ... more functionality
});
}
...
相反,我希望将函数定义一次,并在每次创建新MyObj
时引用它:
bool myFunc(double time)
{
time myobj.doSomething();
// ... more functionality
}
TEST1()
{
MyObj<double> myobj([&myFunc]()); // Something like this
}
TEST2()
{
MyObj<double> myobj(std::bind(&myFunc, myobj, std::placeholders::_1)); // Or something like this
}
所以有些事情需要注意:
MyObj
,已删除所有复制/引用构造函数。MyObj
的引用。感谢任何帮助。感谢。
答案 0 :(得分:2)
您可以创建常规仿函数:
struct Functor
{
MyObj<double>& myobj;
explicit Functor(MyObj<double>& myobj) : myobj(myobj) {};
auto operator ()(double time) const -> bool
{
time = myobj.doSomething();
// ... more functionality
}
};
使用方法:
TEST1()
{
MyObj<double> myobj(Functor(myobj));
// ...
}