【问题标题】:Call function through pointer to class member通过指向类成员的指针调用函数
【发布时间】:2015-05-06 02:58:35
【问题描述】:

在以下代码中:

class foo
{
public:
    void foo_function() {};
};

class bar
{
public:
    foo foo_member;

    void bar_function(foo bar::*p_foo)
    {
        // what is the corrct sintax for following:
        this->*p_foo->foo_function(); // expression must have a pointer type??
    }
};


int main()
{
    foo foo_obj;
    bar bar_obj;
    typedef foo bar::*p_foo;
    p_foo blah = &bar::foo_member;
    bar_obj.bar_function(blah);
    return 0;
}

使 bar::bar_function 工作的正确语法是什么?

【问题讨论】:

  • 优先级类型也不匹配:((this->*p_foo).foo_function)();
  • 你能告诉我们更多关于你得到的语法错误的信息吗?
  • @codekiddy p_foo blah = &bar::foo_member; 你认为&bar::foo_member实际上是通过什么方式提供了一个成员函数指针?
  • @codekiddy 似乎在读者眼中 :-P 但绝对 void bar_function(foo bar::*p_foo) 想要一个成员函数指针。那么你怎么能说我们不是在谈论成员函数指针??
  • 它需要一个成员指针。 foo 是一个类,而不是函数指针 typedef。

标签: c++ member-pointers


【解决方案1】:

这适用于ideone

void bar_function(foo bar::*p_foo)
{
    (this->*p_foo).foo_function();
}

这一切都与正确的间接级别有关。由于p_foo 是一个指向成员的指针,我们需要在尝试从this 访问它之前取消引用它。此时,您拥有实际的foo_member 对象,而不是指向它的指针,因此您可以通过点符号调用它的foo_function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-27
    • 2013-06-06
    • 2015-06-28
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多