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*>私は運がなくてtypedefを試みました。

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;

上記のコードは、コンテナテンプレートと、コンテナテンプレートを使用して整数コンテナ(IntContainer)を作成する方法を示しています。そこで、のtypedefを宣言しましたSetElementFunctionPointer

于 2012-04-19T22:46:01.653 に答える