一个智能指针是否支持通过指针调用成员函数?

3
#include <iostream>
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>

class BASE
{
public:
    int fun1(int i){return i * 1;}
};

int main(){
    int (BASE::*pf2)(int);
    boost::shared_ptr<BASE> pB = boost::make_shared<BASE>();
    pf2 = &BASE::fun1;
    std::cout << (pB->*pf2)(3) << std::endl; // compile wrong: error: no match for 'operator->*' in 'pB ->* pf2'|
}

这是否意味着Boost库没有实现 "->*" 操作符来支持使用它来调用成员函数指针?

BASE没有定义成员变量pf2。你是不是想说fun2 - Rafał Rawicki
2
你应该展示 pf2 的定义 -- 我猜它是指向 BASE 类的成员函数的指针? - interjay
2个回答

4
你应该写成这样:
std::cout << ((*pB).*pf2)(3) << std::endl;

我已查证,Boost库没有为任何指针定义->*运算符,尽管这是可能的(请参阅C++标准的第5.5和13.5节)。
另外,C++11标准也没有为C++11智能指针定义此运算符。

他使用了 pf2,根据主题,它是一个成员函数指针。所以 - 你错了。 - Griwes
@Griwes,原始代码存在歧义。我已经修正了我的答案。 - Rafał Rawicki

3
我猜你应该这样做:

我会猜测你应该这样做:

std::cout << ((*pB).*pf2)(3) << std::endl;

尽管它尚未经过测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接