Я не могу вызвать чисто виртуальную функцию базового класса внутри лямбда-класса унаследованного класса. Я упростил задачу до следующего простого примера ...
Дело в том, что класс 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.