1

cplusplus.comに投稿された Zaita による有用なコード、特に私の場合は関数に変更された安全な数値を取得する部分を考えてみてください。

int get_number()
{
   /**
    * cplusplus.com/forum/articles/6046
    * gets number from input stream
    **/

   string input = "";
   int number = 0;

   while (true)
   {
      getline(cin, input);
      stringstream checks(input);
      if (checks >> number)
         return number;
      cout << "Please enter a valid number\n";
   }
}

さて、私の質問は次のとおりです: intget_number() の関数定義の最初の行にある を削除し、次のような宣言を行うなど、返したいすべての型をコードの先頭で宣言できますか?

double get_number();
int get_number();
long get_number();
unsigned short get_number();
...
...

そして、どういうわけか、関数からの戻り値を格納したい変数に応じて、異なる戻り値を得ることができますか? 現在、名前をに変更しながら、本質的に同じ関数の複数の定義を単に書いていますget_someType

この種の構文で宣言するようなことができることを願っています:

int get_number(int);
double get_double(double);
...
...

そして、私の望みは次のようなことです:

int x;
x = get_number(int);

ただし、これは機能しないと確信しています。名前のないパラメーターで関数のソース コードを定義することは不可能なので...

4

5 に答える 5

2

これは、テンプレートを使用して実行できます。

ここでは、初心者向けのテンプレート チュートリアルをいくつか見つけることができます (58.. から開始) http://thenewboston.org/list.php?cat=16

于 2013-02-01T06:02:25.313 に答える
1
template<class T>
T get_number()
{
   /**
    * cplusplus.com/forum/articles/6046
    * gets number from input stream
    **/

   string input = "";
   T genericobj;

   while (true)
   {
      getline(cin, input);
      stringstream checks(input);
      if (checks >> genericobj)
         return genericobj;
      cout << "Please enter a valid input\n" ;
   }
}
于 2013-02-01T06:03:00.287 に答える