Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 委托工厂函数调用-找不到正确的语法_C++_Function Pointers_Factory - Fatal编程技术网

C++ 委托工厂函数调用-找不到正确的语法

C++ 委托工厂函数调用-找不到正确的语法,c++,function-pointers,factory,C++,Function Pointers,Factory,我想将工厂函数指针和可变长度参数传递给函数,但找不到正确的语法。大概是这样的: #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));

我想将工厂函数指针和可变长度参数传递给函数,但找不到正确的语法。大概是这样的:

#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);
}
#包括
结构资源{
INTA;
浮球b;
静态标准::共享ptr生成(整数a、浮点b){
返回std::shared_ptr(新资源(_a,_b));
}
私人:
Ressource(int_a,float_b):a{u a},b{u b}
};
模板
无效委托(std::shared_ptr(R::*工厂)(Args…,Args…){
std::shared_ptr ressource=工厂(args…);
}
无效测试(){
委托(资源:make,1,3.0f);
}
I get(msvc):错误C2064:[法语错误如下:]


谢谢。

工厂方法
make
应该是
资源的静态成员。然后,
delegate\uu
将只获取指向函数的指针,而不是指向成员函数的指针,然后它将能够调用工厂函数。当前实现的问题是,为了从
委托
中调用
工厂
,您需要提供一个
资源
对象来调用它。

工厂方法
make
应该是
资源
的静态成员。然后,
delegate\uu
将只获取指向函数的指针,而不是指向成员函数的指针,然后它将能够调用工厂函数。您当前实现的问题是,为了从
委托
内部调用
工厂
,您需要提供一个
资源
对象来调用它。

愚蠢的我,当然“make”是静态的,我在编写示例lol时失败了。谢谢-我可以修复我的代码。愚蠢的我,当然是“make”是静态的,我在写我的示例lol时失败了。谢谢你-我可以修复我的代码。