【发布时间】:2018-07-23 06:56:16
【问题描述】:
更新:下面的场景可以简单地通过 this 指针来实现,但我想知道是否有其他方法。我已经简化了问题的要求。但是在 jist 中,问题是在将调用者类的成员变量提交给另一个被调用者类之后,被调用者类是否有任何方法来跟踪 [调用者实例 调用者成员] 变量对。
假设我有Class Callee 和Class Caller。 Class Caller 使用Class Callee 的方法将其成员变量dummy 注册到Class Callee。现在Class Caller 再次调用Class Callee 的方法。
Class Callee 必须识别调用者实例并返回 dummy 变量值。
有没有办法识别调用者对象?还是需要第一次为调用者类分配一个id,并且每当调用者再次调用时调用者需要使用该id?
伪代码:
class Callee {
Callee : id(0) {}
void AddVariable(Data dummy) {
std::pair<int, Data> p;
p.first = id;
p.second = dummy;
}
Data GetVariable() {
//Find the variable, process it and return
}
private:
std::set<std::pair<int, Data>> dummy_list;
int id;
}
class Caller {
Caller {
m_callee->AddVariable(dummy);
}
void SomeFunc() {
std::cout << m_a->GetVariable() << std::endl;
}
private:
Data dummy;
Callee* m_callee;
}
【问题讨论】:
-
您是在尝试识别调用类还是调用对象?
-
您能否详细说明您想要实现的目标?
-
我的错,对象实例。当多个 B 类实例注册其成员变量 dummy 时,用于识别目的。 B 类必须从虚拟变量列表中检查并返回适当的值。
-
真的不清楚你想要实现什么。请编辑问题以包含您目前拥有的任何代码,以便我们了解 A 类和 B 类在这里尝试做什么。如果需要,请使用伪代码,但这样更有可能回答这个问题。
-
用例用于服务器设计:服务器类->为每个连接创建一个通用管理器实例和连接实例连接类->这处理消息,将它们放入队列等。它还注册了这个队列到管理器类管理器类 - > 工作线程实现,将消息和调用库现在我想为库实现锁定/解锁,即连接实例可以调用管理器类的锁定/解锁方法。现在管理器取决于哪个名为 lock 的实例应该为该连接执行消息并停止其他连接的执行