Поиск выполняется в то время, когда константа this
неизвестна. Вы просто должны дать ему подсказку через кастинг. Попробуйте это:
typedef void (abc::*fptr)(int) const; // or remove const
std::tr1::bind((fptr)&abc::hello, x , _1)(a);
Вы также можете заметить, что удаление const
все еще работает. Это потому, что вы должны передавать x по указателю (потому что первый аргумент функции-члена C ++, неявный параметр this
, всегда является указателем). Попробуйте вместо этого:
typedef void (abc::*fptr)(int) const; // won't compile without const (good!)
std::tr1::bind((fptr)&abc::hello, &x , _1)(a);
Как было обнаружено в моих комментариях ниже, если вы пропустите &
, как вы это делали изначально, вы передадите x по значению , что обычно не то, что вы хотите (хотя это мало что дает практическая разница в вашем конкретном примере). Это на самом деле похоже на неудачную ловушку для bind
.