1
class mypair {
    T a, b;
  public:
    mypair (T first, T second)
      {a=first; b=second;}
    T getmax ();
};

template <class T>
T mypair<T>::getmax ()
{
  T retval;
  retval = a>b? a : b;
  return retval;
}

int main () {
  int i;
  cin>>i;
  if(i==0)
      mypair <int> myobject (100, 75);
  else
      mypair <float> myobject (100, 75);

  cout << myobject.getmax();
  return 0;
}

i の値に基づいて、テンプレート クラスの単一のオブジェクトを作成したいと考えています。i の値が 0 の場合、データ型 int else float のテンプレート クラスを作成します。上記のプログラムは、getmax 関数を呼び出す最後の 2 行目で、「myobject」がこのスコープで宣言されていないというエラーをスローします。

どうすればそれを達成できますか>

4

3 に答える 3

2

関数テンプレートを作成して作業を行ってみませんか?

template <typename T>
doStuff()
{
  mypair <T> myobject (100, 75);
  std::cout << myobject.getmax();
}

それから

if(i==0)
  doStuff<int>();
else
  doStuff<float>();
于 2013-11-14T17:50:06.863 に答える
0

問題はスコープです:

if(i==0)
{
      mypair <int> myobject (100, 75);
} // myobject is now out of scope and unusable
  else
{
      mypair <float> myobject (100, 75);
}  // myobject is now out of scope and unusable

テンプレートの非テンプレート ベースを宣言する必要があります。次に、ベースへのポインターを宣言して、if 句で新しい操作を行うと、以下のコードでポインターを使用できます。

余談ですが、単一行ブロックであっても常に {} を含めると一般的に役立ちます

于 2013-11-14T17:51:15.953 に答える