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

时间:2012-04-16 11:34:19

标签: c++

#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库没有实现' - &gt; *'运算符来支持使用它来调用成员函数指针?

2 个答案:

答案 0 :(得分:4)

你应该写:

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

正如我所检查的那样,Boost没有为任何指针定义运算符->*,尽管它是可能的(参见C ++标准,第5.5和13.5节)。

此外,C ++ 11标准没有为C ++ 11智能指针定义此运算符。

答案 1 :(得分:3)

我猜你应该这样做:

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

虽然没有经过测试。