从 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;
    }
};