Выход - использование boost::reference_wrapper, который инкапсулирует в себя ссылку и уже далее передается по значению:
class base
{
public:
virtual std::string whoami() const { return "base"; }
virtual ~base() {};
};
class derived : public base
{
public:
virtual std::string whoami() const { return "derived"; }
};
void whoisthis(const base& obj)
{
std::cout << obj.whoami() << std::endl;
}
void FunctorsTest3()
{
derived d;
base& b = d;
whoisthis(d); // works ok
boost::bind(whoisthis, b)(); // cut derived to base
boost::bind(whoisthis, boost::ref(b))(); // works ok
}
1 комментарий:
just a bit of nitpicking :)
у тебя там base const& юзай boost::cref.
:D
Отправить комментарий