は、私はいくつかの副作用を実行し、その答えを返す関数があるとします。関数ポインタと型変換を返し
int foo()
{
perform_some_side_effect();
return 42;
}
私は関数ポインタにfoo
をバインドしたいが、私が興味を持っていませんよ答えは、ちょうど副作用は:
error: invalid conversion from ‘int (*)()’ to ‘void (*)()’
:
void (*bar)() = foo;
しかし、これは型エラーのように見えます
そのエラーの背後にある根拠は何ですか?なぜ型システムは私に答えを無視できないのですか?サイドノートでは
私はstd::function
に関数ポインタをラップする場合、それが動作します:
std::function<void()> baz = foo;
std::function
(明らかに)型システムでは、この制限を回避するために管理しない方法は?
を動作させるためにいくつかの策略をとります。 'reinterpret_cast'を使ってこれを(あなたの危険で)無効にすることができます。 –
@StevenBurnap:質問は*なぜ*変換できないのですか?彼らが異なるタイプであることは明らかです。 'float'は' int'ではありませんが、あなたはそれらを変換することができます。 – Puppy
私はそれが一般的な規則として暗黙的にポインタをキャストすることが許可されていないためだと思います。 –