2012-04-19 3 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*] 

Я попытался Future<void*> без определения типа во удаче.

ответ

3

Если T является ничтожным * сопзЬ должен быть указатель не на заостренной памяти:

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

Thx, это помогло. Я застрял в течение нескольких часов, и решение так просто ... :). – Salw

+1

Я думаю, что это хороший пример того, почему запись 'const' впереди не является хорошей идеей: 'const T' не совпадает с 'T const', если вы ставите' void *' вместо T. – bames53

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), используя шаблон контейнера. Там я объявил typedef для SetElementFunctionPointer.

Смежные вопросы