64,684
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
template <typename elementType>
struct DisplayElement
{
void operator () (const elementType& element) const
{
cout << element << endl;
}
};
int main(int argc, char *argv[])
{
vector<int> vecIntegers;
vecIntegers.resize(10);
for_each ( vecIntegers.begin () // Start of range
, vecIntegers.end () // End of range
, DisplayElement <int>() ); // Unary function object
return 0;
}
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
template <typename elementType>
struct test2
{
void display(const elementType& element) const
{
cout << element << endl;
}
};
int main(int argc, char *argv[])
{
vector<int> vecIntegers;
vecIntegers.resize(10);
for_each ( vecIntegers.begin () // Start of range
, vecIntegers.end () // End of range
, &test2 <int>::display ); // 报错
return 0;
}
test2<int> a;
for_each ( vecIntegers.begin () // Start of range
, vecIntegers.end () // End of range
, bind1st(mem_fun(&test2<int>::display),&a)); // Unary function object
我把lz的代码改成这样,发现无法编译,说我重复声明或定义,但是错误的地方竟然指向bind1st的定义。后来在网上查了一下,原来成员函数的参数是const引用的话,就会出现这个问题,看来这个问题在旧标准上貌似无解,所以还是建议使用新标准的函数,附上c++11的解决办法
for_each ( vecIntegers.begin () // Start of range
, vecIntegers.end () // End of range
, bind(mem_fn(&test2<int>::display),test2<int>(),placeholders::_1)); // Unary function object
struct DisplayElement
{
int a;
void operator () (const elementType& element) const
{
cout << a<<":"<<element << endl;
}
};
人家这个也是可以编译通过的。template <typename elementType>
struct test2
{
static void display(const elementType& element)
{
cout << element << endl;
}
};
template <typename elementType>
struct test2
{
static void display(const elementType& element)
{
cout << element << endl;
}
};