C++ Curry在CPP中接受抽象参数的函数

C++ Curry在CPP中接受抽象参数的函数,c++,functional-programming,abstract-class,currying,C++,Functional Programming,Abstract Class,Currying,我想要curry一个接受抽象参数的函数。这让我的编译器很生气: #include <functional> class MyAbstractParentClass { public: virtual void someVirtualMethod() = 0; }; class MyConcreteChildClass: public MyAbstractParentClass { public: virtual void someVirtualMethod() o

我想要curry一个接受抽象参数的函数。这让我的编译器很生气:

#include <functional>

class MyAbstractParentClass {
public:
    virtual void someVirtualMethod() = 0;
};

class MyConcreteChildClass: public MyAbstractParentClass {
public:
    virtual void someVirtualMethod() override {}
};

void myFunction(const MyAbstractParentClass& myAbstractObject) {}


int main(int argc, const char * argv[]) {
    
    const MyAbstractParentClass& myChildObject = MyConcreteChildClass();
    
    myFunction(myChildObject); // all good here
    
    const auto myCurriedFunction = std::bind(myFunction, myChildObject); // error here
    
    myCurriedFunction(); // we never get here
}
#包括
类MyAbstractParentClass{
公众:
虚拟void someVirtualMethod()=0;
};
类MyConcreteChildClass:公共MyAbstractParentClass{
公众:
虚拟void someVirtualMethod()重写{}
};
void myFunction(const MyAbstractParentClass&myAbstractObject){}
int main(int argc,const char*argv[]{
const MyAbstractParentClass&myChildObject=MyConcreteChildClass();
myFunction(myChildObject);//这里一切都很好
const auto myCurriedFunction=std::bind(myFunction,myChildObject);//此处出错
myCurriedFunction();//我们永远不会到达这里
}

有没有一种方法可以不使用指针就可以实现此功能?

如果您想使用curry函数,可以使用
boost::hana::curry
,如下所示:

#包括
#包括
整数f(整数x,整数y,整数z){
返回x+y+z;
};
int main{
auto constexpr f_curry=boost::hana::curry(f);
auto constexpr f12=f_curried(1)(2);

std::cout如果您想使用curry函数,可以使用
boost::hana::curry
,如下所示:

#包括
#包括
整数f(整数x,整数y,整数z){
返回x+y+z;
};
int main{
auto constexpr f_curry=boost::hana::curry(f);
auto constexpr f12=f_curried(1)(2);

std::cout
std::bind
复制它的参数,您可以将reference与
std::reference\u包装一起使用

const auto myCurriedFunction = std::bind(myFunction, std::ref(myChildObject));
或使用lambda:

const auto myCurriedFunction = [&](){ return myFunction(myChildObject); };

std::bind
复制其参数,您可以将引用与
std::reference\u包装一起使用

const auto myCurriedFunction = std::bind(myFunction, std::ref(myChildObject));
或使用lambda:

const auto myCurriedFunction = [&](){ return myFunction(myChildObject); };