0
我試圖使用std::mem_fun_ref
(是的,過時 版本。下面的原因)通過代理調用成員函數。使用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;
}
這與C++ 11 std::mem_fn
但不boost::mem_fn
,但 我可以使用那些都,因爲我需要指定在另一個地方的 粘合劑的種類和產生的粘合劑的種類效果很好 未指定爲boost::mem_fn
。這不會是一個問題,如果我能 使用decltype
但我不能作爲代碼需要與 C++ 03兼容。
什麼是解決這個最簡單的方法是什麼?自定義 mem_fun_through_proxy
?
編輯:另一個需要注意的是,proxy
類不能被改變。
如果向代理添加'運營商T&(){return * t}',該怎麼辦? – 2012-03-29 13:08:50
@KerrekSB啊,我忘了。更換代理也是不可能的。實際上,它是一個迭代器。 – pmr 2012-03-29 13:19:43
爲什麼不'fn(* pa)'? – 2012-03-29 13:29:48