假设我有一个函数执行一些副作用,然后返回一个答案:
int foo()
{
perform_some_side_effect();
return 42;
}
我想绑定foo
到一个函数指针,但我对答案不感兴趣,只是副作用:
void (*bar)() = foo;
但是,这似乎是一个类型错误:
error: invalid conversion from ‘int (*)()’ to ‘void (*)()’
该错误背后的原因是什么?为什么类型系统不允许我忽略答案?
附带说明一下,如果我将函数指针包装在 a 中,它会起作用std::function
:
std::function<void()> baz = foo;
(显然)如何std::function
设法规避类型系统中的这种限制?