函数对象 泛型设计 stl c++
#include<algorithm>#include<vector>#include<functional>#include<iostream>usingnamespa...
#include <algorithm>
#include <vector>
#include <functional>
#include <iostream>
using namespace std;
template< typename Type >
class lessEqualOs:
public binary_function< Type, Type, bool > {
public:
lessEqualOs(
ostream &_os = cout,
const string &_interval = string(),
bool _left = true
): os( _os ), interval( _interval ), left( _left ) {}
bool operator()( const Type &_left, const Type &_right ) const {
bool ret = _left < _right;
if( ret ) {
os <<( left ? _left : _right )<< interval;
}
return ret;
}
private:
ostream &os;
string interval;
bool left;
};//函数对象,比较两个数大小,将较小者或较大者输出
int main() {
vector< int > ivec;
for( int i=0; i<10; ++i ) {
int temp;
cin >> temp;
ivec.push_back( temp );
}
int res = count_if( ivec.begin(), ivec.end(), bind1st( lessEqualOs< int >( cout, ", ", false ), 1024 ) );//希望同时统计并输出大于1024的数字
cout << res << endl;
return 0;
}
环境vs2008
编译错误的信息太长不能打上来
去掉 operator()()中的os <<( left ? _left : _right )<< interval;就能正常通过。int和ostream在调用点上应该是可见的的啊。
vs2008的错误太长了,我打vc6.0的错误吧
--------------------Configuration: 模板函数 - Win32 Debug--------------------
Compiling...
模板函数.cpp
C:\Documents and Settings\Administrator\模板函数.cpp(19) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or th
ere is no acceptable conversion)
C:\Documents and Settings\Administrator\模板函数.cpp(16) : while compiling class-template member function 'bool __thiscall lessEqualOs<int>::operator ()(const int &,const int &) const'
Error executing cl.exe.
模板函数.obj - 1 error(s), 0 warning(s)
没人答。。。唉,大牛都不关心百度知道的,这样中国的it怎么发展。 展开
#include <vector>
#include <functional>
#include <iostream>
using namespace std;
template< typename Type >
class lessEqualOs:
public binary_function< Type, Type, bool > {
public:
lessEqualOs(
ostream &_os = cout,
const string &_interval = string(),
bool _left = true
): os( _os ), interval( _interval ), left( _left ) {}
bool operator()( const Type &_left, const Type &_right ) const {
bool ret = _left < _right;
if( ret ) {
os <<( left ? _left : _right )<< interval;
}
return ret;
}
private:
ostream &os;
string interval;
bool left;
};//函数对象,比较两个数大小,将较小者或较大者输出
int main() {
vector< int > ivec;
for( int i=0; i<10; ++i ) {
int temp;
cin >> temp;
ivec.push_back( temp );
}
int res = count_if( ivec.begin(), ivec.end(), bind1st( lessEqualOs< int >( cout, ", ", false ), 1024 ) );//希望同时统计并输出大于1024的数字
cout << res << endl;
return 0;
}
环境vs2008
编译错误的信息太长不能打上来
去掉 operator()()中的os <<( left ? _left : _right )<< interval;就能正常通过。int和ostream在调用点上应该是可见的的啊。
vs2008的错误太长了,我打vc6.0的错误吧
--------------------Configuration: 模板函数 - Win32 Debug--------------------
Compiling...
模板函数.cpp
C:\Documents and Settings\Administrator\模板函数.cpp(19) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' (or th
ere is no acceptable conversion)
C:\Documents and Settings\Administrator\模板函数.cpp(16) : while compiling class-template member function 'bool __thiscall lessEqualOs<int>::operator ()(const int &,const int &) const'
Error executing cl.exe.
模板函数.obj - 1 error(s), 0 warning(s)
没人答。。。唉,大牛都不关心百度知道的,这样中国的it怎么发展。 展开
4个回答
展开全部
这大概只是个基本的STL问题吧,改成这样不就可以了:
os <<( left ? _left : _right )<< interval.c_str();
os <<( left ? _left : _right )<< interval.c_str();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
缺少头文件
#include <string>
未知的类型导致了编译器找不到<<匹配的模板
#include <string>
未知的类型导致了编译器找不到<<匹配的模板
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
g++编译通过,运行正常
能不能把编译错误打出来看看
能不能把编译错误打出来看看
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询