c ++使用多个lambda / binds来引用相同的功能/功能

时间:2017-05-03 13:33:41

标签: c++ c++11 lambda stdbind

我正在为一堂课写一些测试。我有多个测试,每个测试都创建自己的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相关的更多功能,这就是为什么我不想每次重复,因为有很多测试用例。
  • 我需要对实际函数(myFunc)中创建的MyObj的引用。

感谢任何帮助。感谢。

1 个答案:

答案 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));
    // ...
}