模板编程,请教为什么编译错误?

wjb_yd 2010-04-19 03:15:49
#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
...全文
62 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjb_yd 2010-04-19
  • 打赏
  • 举报
回复
谢谢,我看了半天没看出来。
我只是想自己实现一遍而已,不好意思
_JeffreyWu 2010-04-19
  • 打赏
  • 举报
回复
template <class Operation, class T>
inline bind2nd<Operation,T> bind_second(Operation oper, T value)
{
return bind2d<Operation,T>(oper, value); //bind2d --> bind2nd
}


void operator()(T& arg_1)
{
arg_1 = oper(arg1, arg_2); // arg1沒定义
}
taodm 2010-04-19
  • 打赏
  • 举报
回复
你非要啥都和stl里的东西重名么?

64,642

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧