Вам нужно использовать bind2nd
вместо bind1st
:
transform(availableObjs.begin(), availableObjs.end(), back_inserter(clonedObjs),
bind2nd(mem_fun(&A::clone), container)); // container is of type B*
Функтор, созданный mem_fun(&A::clone)
, ожидает A*
в качестве первого параметра. Это обычно неявно указанный экземпляр, для которого вызывается метод. Первый «реальный» параметр A::clone
является вторым параметром mem_fun(&A::clone)
и поэтому должен быть связан с bind2nd
.