为什么C ++模板函数不支持返回指针?

时间:2018-03-28 02:48:07

标签: c++ templates pointers

我有这样的功能:

#include <iostream>


using namespace std;

// function to generate and retrun random numbers.
template<typename T>
T * getRandom( ) {
   static T  r[10];


   for (int i = 0; i < 10; ++i) {
      r[i] = 111;
      cout << r[i] << endl;
   }

   return r;
}

// main function to call above defined function.
int main () {
   // a pointer to an int.
   int *p;

   p = getRandom();
   for ( int i = 0; i < 10; i++ ) {
      cout << "*(p + " << i << ") : ";
      cout << *(p + i) << endl;
   }

   return 0;
}

但是,当我使用g ++ 5.4和c ++ 11编译代码时。编译器给了我这个错误:

main.cpp: In function 'int main()':
main.cpp:25:18: error: no matching function for call to 'getRandom()'
    p = getRandom();
                  ^
main.cpp:25:18: note: candidate is:
main.cpp:8:5: note: template<class T> T* getRandom()
 T * getRandom( ) {
     ^
main.cpp:8:5: note:   template argument deduction/substitution failed:
main.cpp:25:18: note:   couldn't deduce template parameter 'T'
    p = getRandom();
              ^

似乎C ++不支持返回指向模板的指针?

有人可以告诉我我的玩具示例有什么问题,提前谢谢!!

1 个答案:

答案 0 :(得分:6)

模板参数不能是返回类型的deduced,而只能来自函数参数。因此,您必须明确指定模板参数。 e.g。

p = getRandom<int>();
//           ~~~~~