模板函数参数+operator()+for_each这个语法没看懂,该如何解决

模板函数参数+operator()+for_each这个语法没看懂
#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;
}


大体意思知道是什么,但这句DisplayElement <int>(),没看懂,这里传入了一个函数。但如果这个函数不是operator的,是个普通函数,怎么写呢?

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

------解决方案--------------------
template <typename elementType>
struct test2
{
static void display(const elementType& element)
{
cout << element << endl;
}
};

------解决方案--------------------
这个问题在c++11下可以毫无压力地解决,但刚刚我试了试旧标准的bind1st和mem_fum时发现了一个有趣的新问题
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