c++ 使用多个 lambdas/binds 来引用相同的 function/functionality
c++ Using multiple lambdas/binds to reference the same function/functionality
我正在为 class 编写一些测试。我有多个测试,每个测试都创建自己的 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
}
所以有些事情要注意:
- Class
MyObj
,所有copy/reference构造函数已被删除。
- 有更多与 myFunc 相关的功能,这就是为什么我不想每次都重复,因为有很多测试用例。
- 我需要对在实际函数 (myFunc) 中创建的
MyObj
的引用。
感谢任何帮助。谢谢。
您可以创建常规函子:
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));
// ...
}
我正在为 class 编写一些测试。我有多个测试,每个测试都创建自己的 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
}
所以有些事情要注意:
- Class
MyObj
,所有copy/reference构造函数已被删除。 - 有更多与 myFunc 相关的功能,这就是为什么我不想每次都重复,因为有很多测试用例。
- 我需要对在实际函数 (myFunc) 中创建的
MyObj
的引用。
感谢任何帮助。谢谢。
您可以创建常规函子:
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));
// ...
}