通常、Cスタイルの関数ポインタにキャプチャなしのC++ラムダshould be convertableがあります。何らかの形で、std::function::target
を使用して変換すると機能しません(つまりnullptrを返します)。target_type
も同じであるように見えますが、署名の種類に一致しません。 VC13とGCC 5.3/5.2.0でテストキャプチャレスラムダはstd :: functionに格納されているときに関数ポインタに変換できません
/4.8
最小限試験例:出力
0
0
1
<address>
1
<address>
1
<address>
実際の出力であろうと予想
#include <functional>
#include <iostream>
void Maybe() {
}
void callMe(std::function<void()> callback) {
typedef void (*ftype)();
std::cout << (callback.target_type() == typeid(ftype)) << std::endl;
std::cout << callback.target<ftype>() << std::endl;
}
int main() {
callMe([]() {});
callMe(Maybe);
}
質問:ラムダの署名が渡された関数と異なるのはなぜですか?
を_「...に変換する必要があります...」 _ - 引用が必要です。 – Useless
@Useless Hmmm、[引用はこちら](http://stackoverflow.com/a/28746827/1413395)。 –
@πάνταῥεῖありがとう、私は質問 –