模板编程,请教为什么编译错误?
#include "stdafx.h"
#include <iostream>
#include <deque>
#include <algorithm>
using namespace std;
// 乘法仿函数
template<class T>
class plus
{
public:
T operator()(const T& value1, const T& value2)
{
return value1 * value2;
}
};
// 适配器,绑定第二个参数
template<class OPER, class T>
class bind2nd
{
public:
bind2nd(const OPER& _oper, const T& value):
oper(_oper),
arg_2(value)
{
}
void operator()(T& arg_1)
{
arg_1 = oper(arg1, arg_2);
}
private:
OPER oper;
T arg_2;
};
// 实现函数,用于抽取参数类型
template <class Operation, class T>
inline bind2nd<Operation,T> bind_second(Operation oper, T value)
{
return bind2d<Operation,T>(oper, value);
}
int main()
{
deque<int> d_queue;
for (int i = 0; i < 10; i++)
d_queue.push_back(i);
for_each(d_queue.begin(), d_queue.end(), bind_second(plus<int>(), 1));
return 1;
}
Error 1 error C2065: 'bind2d' : undeclared identifier e:\work\vector\vector\vector.cpp 43
Error 2 error C2275: 'Operation' : illegal use of this type as an expression e:\work\vector\vector\vector.cpp 43
Error 3 error C2275: 'T' : illegal use of this type as an expression e:\work\vector\vector\vector.cpp 43