2番目の例が機能しないのはなぜですか?後で参照するためにラムダまたは関数をメディアに型キャストしながら、2番目の例を機能させる方法はありますか?
// Types I'm using
typedef void (*ANY_FUNC)(...);
typedef void (*VOID_FUNC)();
これは動作します
void call_void( VOID_FUNC func) {
((ANY_FUNC)func)();
};
// ...
call_void([]() { /* do something */ });
これはしません
template <typename fn>
void call_any( fn func ) {
((ANY_FUNC)func)();
};
// ...
call_any([]() { /* do something */ });
現在の2番目の例を使用する必要がないという事実を無視してください。デモンストレーション(相対コード)専用です。
どちらの例も、ラムダの代わりに関数ポインターを使用して機能します。