gpt4 book ai didi

c++使用多个lambdas/绑定(bind)来引用相同的函数/功能

转载 作者:行者123 更新时间:2023-11-28 01:49:01 26 4
gpt4 key购买 nike

我正在为一个类(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 ,所有复制/引用构造函数都已删除。
  • 与 myFunc 相关的功能更多,这就是为什么我不想每次都重复,因为有很多测试用例。
  • 我需要引用 MyObj在实际函数 (myFunc) 中创建。

感谢任何帮助。谢谢。

最佳答案

您可以创建常规仿函数:

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

关于c++使用多个lambdas/绑定(bind)来引用相同的函数/功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43761614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com