13

私は常に、関数ポインターにはアンパサンドは必要ないと信じてきました。

関数ポインタにはアンパサンドが必要ですか

それでも、私が見た使用例はすべてboost::bind1つを示しており、コンパイラーは、ほとんどの状況で、省略されている場合、通常は不可解なエラーメッセージを表示します.

synchronize(boost::bind(&Device::asyncUpdate , this, "ErrorMessage"));  // Works

synchronize(boost::bind(Device::asyncUpdate , this, "ErrorMessage"));   // Fails

boost::bindの最初のパラメーターが基本的に関数ポインターであると仮定するのは間違っていますか?

4

1 に答える 1

22

関数ポインターには必要ありませんが、メンバー関数ポインターには必要です。

Device::asyncUpdateにバインドされているため、推測できるように、 はメンバー関数ですthis

これは、n3337、5.3.1/4 からの規範的な引用です。

メンバーへのポインターは、明示的な & が使用され、そのオペランドが括弧で囲まれていない修飾 ID である場合にのみ形成されます。

于 2013-08-19T11:02:28.107 に答える