我們知道std::function
的實質就是個函數指針,但在c++11中std::function
並沒有實現操作符==
(要到C++20才實現),所以我們無法使用==操作符來判斷兩個std::function
對象是否相等,雖然我們明明知道它就是個指針。
但我還是要判斷啊,怎麼辦?
仔細研究了std::function
的定義,找到了這個 target()
函數,c++11標準的官方定義就是返回函數指針,既然它返回了函數指針,自然就可以用==
來比較地址是否相等了
std::function<void(const std::string &)> f1;
std::function<void(const std::string &)> f2;
bool eq = f1.target<void(*)(const std::string &)>() == f2.target<void(*)(const std::string &)>()
target函數說明:
https://en.cppreference.com/w/cpp/utility/functional/function/target