Невозможно вызвать родительскую чисто виртуальную функцию внутри лямбды - PullRequest
0 голосов
/ 12 мая 2018

Я не могу вызвать чисто виртуальную функцию базового класса внутри лямбда-класса унаследованного класса. Я упростил задачу до следующего простого примера ...

Дело в том, что класс Test снова должен быть базовым классом какого-то другого класса, который будет реализовывать чисто виртуальную функцию (где угодно в программе).

class Base
{
    public:

        virtual void DoSomething(Parameter* p) = 0;

};

class Test : public Base 
{
    public:

        void addFunction() 
        {
            mFunction = [this] (Parameter* p) { Base::DoSomething(p); };
        }

    private:

    std::function<void(Parameter* p)> mFunction;
};

Я получаю следующую ошибку компиляции:

undefined reference to Base::DoSomething(Parameter* p)

Мое текущее решение - вызвать функцию tempFunction в базовом классе, а затем вызвать виртуальную функцию. Но это больше похоже на взлом ... и означает ненужные накладные расходы:

class Base
{
    public:

        virtual void DoSomething(Parameter* p) = 0;

    protected:

        void tempDoSomething(Parameter* p) { DoSomething(p); }  // call this function instead

};

Я использую Android-NDK с компилятором clang.

...