2016-05-17 89 views
1

我有如下兩個模板類:如何創建模板成員函數的函數指針?

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); 
    } 

}; 

我需要一個函數指針成員函數fun

問題是這兩個類都是模板類,所以我不知道該怎麼做。

我該如何解決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的問題時。 –