functionを空にする方法

boost::functionは、clear()メンバ関数を使用する。

#include <iostream>
#include <boost/function.hpp>

void foo() {}

int main()
{
    boost::function<void()> f = foo;
    f.clear(); // これ

    if (f) {
        std::cout << "has function" << std::endl;
    }
    else {
        std::cout << "hasn't function" << std::endl;
    }
}
hasn't function

std::functionは、nullptrを代入する。

#include <iostream>
#include <functional>

void foo() {}

int main()
{
    std::function<void()> f = foo;
    f = nullptr; // これ

    if (f) {
        std::cout << "has function" << std::endl;
    }
    else {
        std::cout << "hasn't function" << std::endl;
    }
}
hasn't function