在我有一个与另一个类进行通信的类(如API)并从该类获得回调的情况下,处理循环包含的最佳方式是什么。当需要传回值时避免循环包含
假设我有一个类
.H
class Requestor;
class Api
{
public:
Api();
void Request();
int DoStuff();
private:
Requestor *p_rq_;
};
的.cpp
#include "api.h"
#include "requestor.h"
Api::Api()
{
}
void Api::Request() {
this->DoStuff();
}
void Api::ReturnRequestId(int id) {
this->p_rq->SetLastRequestId(id);
}
和
.H
class Api;
class Requestor
{
public:
Requestor();
void MakeRequest();
void SetLastRequestId(int);
private:
Api api_;
int last_request_id_;
};
的.cpp
#include "requestor.h"
#include "api.h"
Requestor::Requestor()
{
}
void Requestor::MakeRequest() {
this->api_.Request();
}
void Requestor::SetLastRequestId(int id) {
this->last_request_id_ = id;
}
如果请求者发送一个请求,并在某些时候API获取的ID,并希望传递回请求者,我怎么能做到这一点,而不包括每个人的.h文件中这将导致循环包容? 假设我不能简单地使用MakeRequest函数返回id,因为我不想持有该线程,直到api获取id为止?
我对C++和编程相当陌生,所以我可能会错过显而易见的解决方案。因为我需要调用对方的成员函数,所以我的理解是前向声明在这里不起作用。
另外,Api和Requestor应该是独立的库,所以我不能让它们成为一个类。
你有没有尝试在'Requestor.h'中包含'Api.h'?您需要定义成员非指针的定义。将不会有通告。 – LogicStuff
而不是一个实例,你可以在请求者中有一个指向Api的指针,在构造函数中创建它并在析构函数中删除它。或者,如果您想进行大量输入,请使用auto_ptr。 – cup
@cup'auto_ptr'已弃用,不应再使用。相反,应该使用'shared_ptr','unique_ptr'和'weak_ptr'。 –