1

I have template with overloaded method. I'm trying to create pointer to the overloaded method.

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;

Compilation fails with this error:

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*]

I have tried to typedef Future<void*> without any luck.

4

2 回答 2

3

如果 T 是 void* 则 const 应该在指针上而不是在指向的内存上:

void* const & (Future<void*>::*x)() const = &Future<void*>::get;
于 2012-04-19T22:43:55.367 回答
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;

上面的代码向您展示了一个 Container 模板,以及如何IntContainer使用 Container 模板创建一个整数容器 ( )。在那里,我为 a 声明了一个 typedef SetElementFunctionPointer

于 2012-04-19T22:46:01.653 回答