gpt4 book ai didi

c++ - How to call the function in derived class to process handle_post?(Function call missing argument list to create pointer)

转载 作者:行者123 更新时间:2023-11-28 02:00:21 25 4
gpt4 key购买 nike

在我的基类中,这是一个公共(public)非静态成员函数:

void BaseClass::SetPorcessMethod()
{
//do something
Listener.support(methods::POST, this->HandlePost);
//do something
}

在上面的函数中,Listener是一个静态成员变量。函数 HandlePost 是一个由所有派生类实现的纯虚函数。我想使用 this 指针从不同的派生类调用不同的 HandlePost。喜欢:

class BaseClass
{
public:
static http_listener listener;
void SetPorcessMethod();
virtual void HandlePost((http_request request) = 0;
/*listener is init in constructor , not display here*/
}
class Derived2:public BaseClass
{
void HandlePost(http_request request);
}
class Derived1:public BaseClass
{
void HandlePost(http_request request);
}

Derived1 instance1;
instance1.SetPorcessMethod();
Derived2 instance2;
instance2.SetPorcessMethod();

但是,它显示BaseClass::HandlePost:function call missing argument list use &BaseClass::HandlePost:function to create a pointer to member。我知道这是因为你的代码试图传递一个指向成员函数的指针,它不能转换为指向函数的指针。这是因为指向成员函数的指针只能在对象上调用,所以它不知道要使用什么对象。 Function call missing argument list to create pointer 但是我应该怎么做才能使用support() 从派生类调用函数?

最佳答案

您正在尝试将成员函数传递给 support .为了调用这样的函数,调用者需要成员函数参数和指向调用该函数的实例的指针。

但是support期望一个 std::function<void(http_request)> ,即没有实例指针。因此,您必须将调用包装到另一个不需要 BaseClass 的可调用对象中实例指针传递。您可以使用 lambda(或 std::bind,如果您愿意):

Listener.support( methods::POST,
[this](http_request request){return HandlePost(request);} );

Listener.support( methods::POST,
std::bind(&BaseClass::HandlePost, this, std::placeholders::_1) );

#include<functional>对于后一种变体。

关于c++ - How to call the function in derived class to process handle_post?(Function call missing argument list to create pointer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39862932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com