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 ライブラリが '->*' 演算子を実装して、メンバー関数ポインターの呼び出しをサポートしていないことを意味しますか?

4

2 に答える 2

4

あなたは書くべきです:

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

私が確認したように、Boost は->*どのポインターに対しても演算子を定義していませんが、可能ではあります (C++ 標準のセクション 5.5 および 13.5 を参照)。

また、C++11 標準では、C++11 スマート ポインターに対してこの演算子を定義していません。

于 2012-04-16T11:37:46.580 に答える
3

私はあなたがこのようにそれをするべきだと思います:

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

テストされていませんが。

于 2012-04-16T11:38:54.333 に答える