Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板问题_C++_Templates - Fatal编程技术网

C++ 模板问题

C++ 模板问题,c++,templates,C++,Templates,究竟为什么我能做到这一点: #include <iostream> #include <algorithm> #include <vector> using namespace std; void myfunction (int i) { cout << " " << i; } int main () { vector<int> myvector; myvector.push_back(10); myve

究竟为什么我能做到这一点:

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

void myfunction (int i) {
  cout << " " << i;
}

int main () {
  vector<int> myvector;
  myvector.push_back(10);
  myvector.push_back(20);
  myvector.push_back(30);

  cout << "myvector contains:";
  for_each (myvector.begin(), myvector.end(), myfunction);//<-------See below
return 0;
}
template<class T>
    void myfunction (T i) {
          cout << " " << i;
        }
#包括
#包括
#包括
使用名称空间std;
void myfunction(int i){

cout不能将模板传递给每个
的第三个参数。必须传递可通过
操作符()调用的实例。
。在这种情况下,可以通过提供函数的所有模板参数来实例化函数模板:

 std::for_each(myvector.begin(), myvector.end(), &myfunction<int>);
std::for_each(myvector.begin()、myvector.end()、和myfunction);

另一方面,您应该真正避免使用命名空间std
,因为它引入了许多可能与标识符冲突的名称。此外,您应该使用
&
语法来明确您正在传递函数指针。

问题是您无法创建指向模板函数的指针。您应该能够不过,我没有尝试使用指向实例化模板函数的指针。我没有尝试过,但以下方法应该可以工作:

for_each (myvector.begin(), myvector.end(), myfunction<int>)
每个(myvector.begin()、myvector.end()、myfunction)的
,因为编译器无法将模板隐式转换为谓词。您必须显式声明要调用的函数:

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

template <typename T>
void myfunction (T i)
{
    cout << " " << i;
}

int main () {
  vector<int> myvector;
  myvector.push_back(10);
  myvector.push_back(20);
  myvector.push_back(30);

  cout << "myvector contains:";
  for_each (myvector.begin(), myvector.end(), myfunction<int>);
  cout << endl;
}
#包括
#包括
#包括
使用名称空间std;
模板
void myfunction(ti)
{
库特
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

struct MyPredicate {
    template <typename T>
    void operator () (T i)
    {
        cout << " " << i;
    }
};

int main () {
  vector<int> myvector;
  myvector.push_back(10);
  myvector.push_back(20);
  myvector.push_back(30);

  cout << "myvector contains:";
  for_each (myvector.begin(), myvector.end(), MyPredicate ());
  cout << endl;
}