Zebrafish
Zebrafish

Reputation: 14014

How to reset an std::function?

std::function can be empty, and it's convertible to bool to test if it has a target or not. But, how to set it to null after you've assigned something to it?

int main()
{
    std::function<void()> f = []() { return 4; };
    // how to reset to null, to it's initial state when default constructed.
}

Upvotes: 8

Views: 4052

Answers (3)

3CxEZiVlQ
3CxEZiVlQ

Reputation: 38716

The simplest way, I use it:

f = {};

https://godbolt.org/z/hzEq3xo4e

#include <functional>

int main() {
  std::function<void()> f = []() { return 4; };
  f = {};
}

Upvotes: 7

Remy Lebeau
Remy Lebeau

Reputation: 596938

You can either:

  • assign nullptr to it:

    f = nullptr;
    
  • assign an empty function to it:

    f = std::function<void()>{};
    // or:
    f = decltype(f){};
    
  • swap() it with another empty function:

    std::function<void()>{}.swap(f);
    // or:
    decltype(f){}.swap(f);
    

Upvotes: 10

Drew Dormann
Drew Dormann

Reputation: 63838

Assign nullptr to it to make it empty.

f = nullptr;

Upvotes: 4

Related Questions