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;
}