C 使用多个lambdas/绑定以引用相同的功能

c++ Using multiple lambdas/binds to reference the same function/functionality

本文关键字:引用 功能 绑定 lambdas      更新时间:2023-10-16

我正在为课程编写一些测试。我有多个测试,每个测试都创建了自己的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类,所有复制/参考构造函数均已删除。
  • 有更多与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));
    // ...
}