2012-04-19 62 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。