#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; *'运算符来支持使用它来调用成员函数指针?
答案 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;
虽然没有经过测试。