を使用std::bind
してメンバー関数をバインドする場合、最初の引数はオブジェクトthis
ポインターです。ただし、オブジェクトをポインターとして渡す場合とそうでない場合の両方で渡すことは機能します。
たとえば、次のプログラムを参照してください。
#include <iostream>
#include <functional>
struct foo
{
void bar(int v) { std::cout << "foo::bar - " << v << '\n'; }
};
int main()
{
foo my_foo;
auto f1 = std::bind(&foo::bar, my_foo, 1);
auto f2 = std::bind(&foo::bar, &my_foo, 2);
f1();
f2();
}
clang と GCC の両方がこれを問題なくコンパイルし、結果は両方のバインドで機能します。
フー::バー - 1 フー::バー - 2
私は仕様 (セクション 20.8.9) に頭を悩ませようとしてきましたが、それは私には明確ではない場所の 1 つです。
どちらか一方だけが正しいか、両方が正しいか。