Инициализация std::function в родительском классе с использованием члена в производном классе

У меня есть родительский класс, который выглядит примерно так:

class Parent
{
    Parent(std::function<double(double)> func);
};

и производный класс, который выглядит примерно так:

class Derived : public Parent
{
    const double val;

    double MyFunc(double x)
    {
        return x / val;
    }

    Derived(double value)
        : Parent(std::function<double(double)>(&Derived::MyFunc)),
          val(value)
    {
    }
};

В основном я хочу ограничить func из родительского класса в производном классе. Я знаю, почему то, что я сделал выше, не работает; Я пробовал разные вещи, такие как MyFuncstatic; Однако это не помогает, потому что тогда я не могу использовать valueчто опять же имеет смысл...

Есть ли хороший способ сделать эту работу?

Спасибо.

2 ответа

Изменить это

    : Parent(std::function<double(double)>(&Derived::MyFunc)),

в

    : Parent(std::bind(&Derived::MyFunc, this, std::placeholders::_1)),

В качестве альтернативы std::bind Вы можете использовать лямбду:

Parent([this](int x) { return this->MyFunc(x); })
Другие вопросы по тегам