■33320 / inTopicNo.1) |
boost::lambda::bindについて |
□投稿者/ bluebard (3回)-(2009/02/25(Wed) 18:46:57)
|
分類:[C/C++]
ネタ元:http://pc11.2ch.net/test/read.cgi/tech/1232367742/
以下の様なクラスがあった時
struct A
{
virtual void hoge() = 0;
};
struct B : public A
{
void hoge()
{
std::cout << "hoge\n";
}
};
struct C
{
void func(A& a)
{
a.hoge();
}
};
以下のmainを実行する
int main()
{
C c;
A* b = new B;
boost::bind(&C::func, c, _1)(*b); // ok
boost::lambda::bind(&C::func, c, *b); // error 抽象クラスをインスタンス化できません
boost::lambda::bind(&C::func, boost::ref(c), boost::ref(*b)); // error 抽象クラスをインスタンス化できません
boost::lambda::bind(&C::func, boost::lambda::var(c), boost::lambda::var(*b)); // error 抽象クラスをインスタンス化できません
boost::lambda::bind(&C::func, c, boost::lambda::var(boost::ref(*b))); // ok
}
boost::lambda::bind(&C::func, c, boost::lambda::var(boost::ref(*b))); でコンパイルが通る理由を教えてください。
なぜ、これの場合「抽象クラスをインスタンス化できません」のエラーが発生しないのでしょうか?
|
|