boost: вот не ожидал.. :-(
От: ioni Россия  
Дата: 03.10.07 10:19
Оценка: -1
значит вот такой workaround

#include <boost/bind.hpp>
#include <boost/function.hpp>
#include <iostream>

typedef boost::function< void(int, int) >fn_type;
//
class B
{
    fn_type fn_;
public:
    B()
    {
    }
    void assign(fn_type fn)
    {
        fn_ = fn;
    }
    void ready()
    {
        fn_(10, 11);
    }
};
//
class A
{
    B& b_;
public:
    A(B& b) : b_(b)
    {
        b_.assign( boost::bind(&A::foo, this, -1, -1) );
    }
    void init()
    {
        b_.ready();
    }
    void foo(int i, int k)
    {
        std::cout << "i = " << i << " k = " << k << std::endl;
    }
};

int main()
{
    B b;
    A a(b);
    b.ready();
    //
    return 0;
}


выводит соответственно
-1 -1


а хотелось бы
10, 11


дело все в том что при создании объектов начальные значения
"заначиваются" в одном из промежуточных объектов (смотреть файл bind.hpp)

в таком случае если это поведение что называется by design
то возможно ли это обойти используя тот же boost или нет ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.