更新:下面的情况可以通过此指针简单地实现,但是我想知道是否还有其他方法。我已简化了出于提问目的的要求。但实际上,问题是在将调用者类的成员变量提交给另一个被调用者类之后,被调用者类是否有任何方法可以跟踪[调用者实例<->调用者成员]变量对。
假设我有Class Callee
和Class Caller
。 Class Caller
使用dummy
的方法将其成员变量Class Callee
注册到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;
}
答案 0 :(得分:0)
不告诉A哪个实例正在调用此问题是无法解决的; C ++不提供此类信息。而且即使那样,您也必须相信所提供的实例是正确的(也就是说,在这种情况下,无法防范主动的恶意代码)。