- 论坛徽章:
- 2
|
回复 #1 mabuc 的帖子
template<class For,class Gen>
void generate(For first,For last,Gen g) {
for (;first!=last;++first) *first=g();
}
注意红色部分。
g必须可以 g();
并且返回值可以被 *first接受。
generate( v.begin(),v.end(), rand ) 是可以的。
Gen = int (*)(void);
Gen g = rand;
g(); 就是 对rand的调用 : rand();
generate( v.begin(),v.end(), rand() ) 是不行的。
Gen = int;
Gen g = rand(); // g一个随机整数,它就不支持如下语法:
g();
--------
struct Random {
int operator()() const {
return rand();
}
};
generate( v.begin(),v.end(), Random ); 是不行的, 因为Random是一个类型名, 而这里需要一个对象作为generate的实际参数。
generate( v.begin(),v.end(), Random() ); 使用 Random()构造一个对象。
Gen = Random
Gen g = Random();
g() 就是 调用g的调用操作符。
[ 本帖最后由 OwnWaterloo 于 2009-5-21 16:08 编辑 ] |
|