识别呼叫者对象

时间:2018-07-23 06:56:16

标签: c++ oop

更新:下面的情况可以通过指针简单地实现,但是我想知道是否还有其他方法。我已简化了出于提问目的的要求。但实际上,问题是在将调用者类的成员变量提交给另一个被调用者类之后,被调用者类是否有任何方法可以跟踪[调用者实例<->调用者成员]变量对。

假设我有Class CalleeClass CallerClass 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;
}

1 个答案:

答案 0 :(得分:0)

不告诉A哪个实例正在调用此问题是无法解决的; C ++不提供此类信息。而且即使那样,您也必须相信所提供的实例是正确的(也就是说,在这种情况下,无法防范主动的恶意代码)。