Я пытаюсь использовать 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;
}
Это хорошо работает с C ++ 11 std::mem_fn
но не boost::mem_fn
, но я не могу использовать ни один из них, поскольку мне нужно указать тип связующего в другом месте, а тип полученного связующего не указан для boost::mem_fn
.Это не было бы проблемой, если бы я мог использовать decltype
, но я не могу, поскольку код должен быть совместим с C ++ 03.
Какой самый простой способ обойти это?Пользовательский mem_fun_through_proxy
?
Редактировать: Еще одна оговорка: нельзя изменить класс proxy
.