2012-04-19 102 views
1

我有模板重載的方法。我試圖創建指向重載方法的指針。模板類重載方法指針

template<typename T> 
class Future { 
public: 
    const T& get() const; 
    bool get(T*, int timeoutMs) const; 
}; 

... 

const void*&(Future<void*>::*x)()const = &Future<void*>::get; 

編譯失敗,此錯誤:

no matches converting function 'get' to type 'const void*& (class Future<void*>::*)()const' 
candidates are: const T& Future<T>::get() const [with T = void*] 
       bool Future<T>::get(T*, int) const [with T = void*] 

我曾嘗試的typedef Future<void*>沒有任何的運氣。

回答

3

如果T是void * const的應該是上的指針不上的指示內存:

void* const & (Future<void*>::*x)() const = &Future<void*>::get; 
+0

Thx,它幫助。我被困了幾個小時,解決方案非常簡單... :)。 – Salw 2012-04-19 22:49:49

+1

我認爲這是一個很好的例子,爲什麼在前面寫'const'不是一個好主意:'const T'和'T const'不一樣,如果你把'void *'替換成T. – bames53 2012-04-19 22:57:35

0

模板本身沒有指針。模板是模板,它告訴C++如何創建一個類。所以

template<class T> 
class Container { 
public: 
    T* element() { return element_; } 
    void SetElement(Element *element) { element_ = element; } 
    typedef void (*SetElementFunctionPointer)(Element *element); 
private: 
    T *element_; 
}; 

typedef Container<int> IntContainer; 

上面的代碼顯示了一個集裝箱的模板,以及如何創建通過使用模板容器整數容器(IntContainer)。在那裏我宣佈了一個SetElementFunctionPointer的typedef。