7

以下のように演算子をオーバーロードしたい単純なクラスがあります

class MyClass
{
   public:
      int first;

      template <typename T>
      T operator () () const { return first; }  
};

そして私が持っている他のどこか

MyClass obj;

int i = obj(); // This gives me an error saying could not deduce
               // template argument for T

誰かがこのエラーで私を助けてくれますか、大いに感謝します。ありがとうございました。

編集:

これはoperator()と関係があります。たとえば、関数を次のように置き換えた場合です。

    template <typename T>
    T get() const { return first;}

できます。すべての回答に感謝します。

4

5 に答える 5

5

関数呼び出しを暗黙的にしたい場合は、次のようにテンプレートをクラスに適用する必要があります。

template <typename T>
class MyClass
{
  public:
  T first;

  T operator () () const { return first; }  
};

別のタイプにキャストする必要がある場合は、次のようにする必要があります。

template <typename T>
class MyClass
{
  public:
  T first;

  template <typename U>
  U operator () () const { return (U)first; }  
};
于 2009-06-14T06:09:21.720 に答える
0

やってみましたint i = obj<int>();か?

于 2009-06-14T06:00:03.487 に答える
0

そもそもなぜこれがテンプレートなのかわかりません。常に int を返しますよね?ありがとう

于 2009-06-14T07:01:14.947 に答える