【问题标题】:How to set std::function in class如何在类中设置 std::function
【发布时间】:2021-09-08 14:51:27
【问题描述】:

我有课

class MyClass
{
   typedef std::function<void(const std::string &str> SomeFunc;
   SomeFunc Func;
}

我想为这个功能设置。我做了一个

void MyClass::SetFunc(SomeFunc Func1)
{
    Func = Func1;
}

我需要在我的类函数中作为成员并且我想使用 std::function,因为它允许使用 lambda。如果 lambda 很复杂,我需要移动函数。如果 lambda 是简单的,一个副本会很好。我不知道该怎么做

【问题讨论】:

  • 移动指针副本。这个问题比较不清楚。你真的想要SoemFunc Func; 成为会员吗?
  • 如果你不想移动,你为什么打电话给moveFunc = Func1; 怎么了?
  • 听起来你混淆了函数指针和std::function。只需在您当前使用SomeFunc* 的任何地方使用SomeFunc,它应该会容易得多。
  • 编辑后我看不到代码的问题。 “我怎么能移动?我需要2套:复制和移动。”你的意思是你需要重载SetFunc,一个是复制的,一个是移动的?您是否尝试编写第二个重载?我不会太在意移动和复制std::function虽然
  • 是的,我的意思是这个问题@463035818_is_not_a_number

标签: c++ std


【解决方案1】:

我找到了答案 Should I copy an std::function or can I always take a reference to it?

void MyClass::SetFunc(const SomeFunc &Func1)
{
    Func= Func;
}

void MyClass::SetFunc(SomeFunc &&Func1)
{
    Func= std::move(Func);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-25
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多