2012-04-16 4 views
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ライブラリがメンバ関数ポインタを呼び出すのに使用するための ' - > *'演算子を実装していないことを意味しますか?スマートポインタは、ポインタを介してメンバ関数を呼び出すことをサポートしていますか?

+0

クラス 'BASE'にはメンバ' pf2'が定義されていません。あなたは 'fun2'を意味しましたか? –

+2

'pf2'の定義を表示する必要があります - ' BASE'のメンバ関数へのポインタであると仮定しますか? – interjay

答えて

4

あなたが書く必要があります:私がチェックしたとして、それが可能であるが

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

は、ブーストは、ポインタのいずれかのオペレータ->*を定義していない(C++標準、セクション5.5と13.5を参照してください)。

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

+0

彼は 'pf2'を使います。(トピックによると)メンバー関数へのポインタです。だからあなたは間違っている。 – Griwes

+0

@Griwes OPによって提供されるコードはあいまいでした。私は答えを決めた。 –

3

私はあなたがこのようにそれを行う必要があることを推測する:

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

それはテストされていないが。

関連する問題