std::mem_fun_ref
プロキシを介してメンバー関数を呼び出すために (はい、廃止されたバージョン。理由は以下) を使用しようとしています。
template<typename T>
struct proxy {
T& operator*() { return *t; }
T* operator->() { return t; }
// no address of etc
T* t;
};
struct A {void foo() {}};
int main()
{
A a;
proxy<A> pa = {&a};
std::mem_fun_ref_t<void, A>
fn = std::mem_fun_ref(&A::foo);
fn(pa); // borks
return 0;
}
std::mem_fn
これは C++11ではうまく機能しboost::mem_fn
ますが、boost::mem_fn
. 使用できれば問題ありませんがdecltype
、コードが C++03 と互換性がある必要があるため使用できません。
これを回避する最も簡単な方法は何ですか? カスタム
mem_fun_through_proxy
?
編集:もう1つの注意点は、proxy
クラスを変更できないことです。