Вызов делегированной фабричной функции - не удается найти правильный синтаксис - PullRequest
0 голосов
/ 02 апреля 2020

Я бы хотел передать указатель фабричной функции и аргументы длины c переменной в функцию, но не могу найти правильный синтаксис. Примерно так:

#include <memory>

struct Ressource {
    int a;
    float b;

    static std::shared_ptr<Ressource> make(int _a, float _b) {
        return std::shared_ptr<Ressource>(new Ressource(_a, _b));
    }

private:
    Ressource(int _a, float _b) : a{ _a }, b{ _b } {}
};

template<typename R, typename... Args>
void delegate_(std::shared_ptr<R>(R::*factory)(Args...), Args... args) {
    std::shared_ptr<R> ressource = factory(args...);
}

void test() {
    delegate_(&Ressource::make, 1, 3.0f);
}

Я получаю (msv c): ошибка C2064: [ошибка следует на французском языке:]

Спасибо.

1 Ответ

2 голосов
/ 02 апреля 2020

Заводской метод make должен состоять из c члена Resource. Тогда delegate_ получит только указатель на функцию, а не указатель на функцию-член, и тогда он сможет вызвать фабричную функцию. Проблема с вашей текущей реализацией заключается в том, что для вызова factory из delegate_ вам необходимо предоставить объект Resource для его вызова.

...