2016-05-17 15 views
1

以下のように私は2つのテンプレートクラスを持っている:私は、メンバ関数funへの関数ポインタを取得する必要がありますテンプレートメンバ関数への関数ポインタの作成方法は?

template<class T> 
class pub { 
public: 
    void fun(T a, T b) 
    { 
     //do something with a & b 
    } 
} 

template<class T> 
class sub 
{ 
private: 
    std::set<funPtr> funPtr; 
public: 

    void fun2(funPtr f) 
    { 
     funPtr.insert(funPtr); 
    } 

}; 

問題は両方のクラスがテンプレートクラスなので、私はそれを行う方法がわかりません。

C++でこの問題をどのように解決できますか?

+0

'funPtr'とは何ですか? –

+1

@PiotrSkotnicki、逆説的に、それは 'std :: set 'です。 – SergeyA

+0

fooはどこですか? funPtrはタイプではありません。 – perencia

答えて

3
template<typename T> 
using funPtr = void (pub<T>::*)(T, T); 

使用:単に

std::set<funPtr<T>> funPtrs; 

又は(sub内部テンプレートパラメータTが表示されている):

using funPtr = void (pub<T>::*)(T, T); 

std::set<funPtr> funPtrs; 
+0

お返事ありがとう、funPtrの定義について混乱して申し訳ありません。 – user888270

2
template<class T> 
class sub 
{ 
private: 
    // typedef void (pub<T>::*funPtr)(T,T); // C++98 
    using funPtr = void (pub<T>::*)(T,T);  // C++11 
    std::set<funPtr> fset; 
public: 

    void fun2(funPtr f) 
    { 
     fset.insert(f); 
    } 
}; 
+3

Boo for 'typedef '、その秘密のレガシー松葉杖。 –

+0

@Kerrek:そうですね、C++ 98 – shrike

+2

@shrikeで作業していましたが、C++ 11にタグ付けされた質問に応答するときは、C++ 11にアップグレードしてください。 –

関連する問題