从 Lambda 中调用虚拟父保护函数
Call virtual parent protected function from within a Lambda
如何在受保护时使用 lambda 调用虚父函数?
template<typename T>
class Parent
{
protected:
virtual int Show()
{
std::cout<<"Parent::Show Called\n";
}
};
class Child : Parent<Child>
{
protected:
virtual int Show() final override
{
std::cout<<"Child::Show Called\n";
//supposed to be in a thread in my original code.
auto call_parent = [&] {
//Parent<Child>::Create(); //call other parent functions..
Parent<Child>::Show();
};
call_parent();
}
};
我得到的错误是:
错误:'int Parent::Show() [with T = Child]' 在此上下文中受到保护
有什么想法吗?我在 Windows.
上使用 GCC/G++ 4.8.1
作为变通方法,您可以通过蹦床调用 Parent<Child>::Show()
函数:
class Child : Parent<Child>
{
int trampoline() {
return this->Parent<Child>::Show();
}
protected:
virtual int Show() final override
{
std::cout<<"Child::Show Called\n";
auto call_parent = [&] {
this->trampoline();
};
call_parent();
return 0;
}
};
如何在受保护时使用 lambda 调用虚父函数?
template<typename T>
class Parent
{
protected:
virtual int Show()
{
std::cout<<"Parent::Show Called\n";
}
};
class Child : Parent<Child>
{
protected:
virtual int Show() final override
{
std::cout<<"Child::Show Called\n";
//supposed to be in a thread in my original code.
auto call_parent = [&] {
//Parent<Child>::Create(); //call other parent functions..
Parent<Child>::Show();
};
call_parent();
}
};
我得到的错误是:
错误:'int Parent::Show() [with T = Child]' 在此上下文中受到保护
有什么想法吗?我在 Windows.
上使用 GCC/G++ 4.8.1作为变通方法,您可以通过蹦床调用 Parent<Child>::Show()
函数:
class Child : Parent<Child>
{
int trampoline() {
return this->Parent<Child>::Show();
}
protected:
virtual int Show() final override
{
std::cout<<"Child::Show Called\n";
auto call_parent = [&] {
this->trampoline();
};
call_parent();
return 0;
}
};