std::functionが空かどうかを適切に確認する方法を知りたいと思っていました。この例を考えてみましょう:
class Test {
std::function<void(int a)> eventFunc;
void registerEvent(std::function<void(int a)> e) {
eventFunc = e;
}
void doSomething() {
...
eventFunc(42);
}
};
このコードはMSVCで正常にコンパイルされdoSomething()ますがeventFunc、コードを初期化せずに呼び出した場合、コードは明らかにクラッシュします。それは予想されますが、私は何の価値があるのeventFuncかと思っていました。デバッガは言う'empty'。だから私は単純なifステートメントを使用してそれを修正しました
void doSomething() {
...
if (eventFunc) {
eventFunc(42);
}
}
これは機能しますが、未初期化の値は何std::functionですか?私が書きたいと思いif (eventFunc != nullptr)ますがstd::function(明らかに)ポインタではありません。
なぜ純粋なものが機能するのですか?その背後にある魔法は何ですか?そして、それをチェックする方法は正しいですか?
eventFuncこれはラムダではないことに注意してください。それはstd::functionです。ラムダをstd::functionsに格納できますが、同じものではありません。