指向模板类的重载方法的指针

时间:2012-04-19 22:39:14

标签: c++

我有重载方法的模板。我正在尝试创建指向重载方法的指针。

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

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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模板,以及如何使用Container模板创建整数容器(IntContainer)。在那里,我已经为SetElementFunctionPointer声明了一个typedef。