习惯了用boost库的function,今天使用VS2005+sp1编译一个程序,用到了std::function,结果出现了:error C2039: "function": 不是"std"的成员的错误,但是我已经#include <functional>了啊!
上网搜了搜,初步判断是VS 2005并不支持std::function。于是安装了VS 2008,再次编译,还是出现编译错误:"function": 不是"std"的
成员。将std::function改为 std::tr1::function也不行。
再次上网搜索,才发现TR1的错误在VC9的SP1中解决。请参考:
TR1 Fixes In VC9 SP1
作者还这样说:tr1::function can now store function objects with non-const function call operators. (This was a severe problem.)
VS 2005就已经能支持boost::function了,可见微软的STL不是一般的水,看来改天要试试STLport。另外在网上 std::function貌似用得 还不如boost::function多。
7 个解决方案
#1
原来如此
#2
“VS2005就能支持boost::function”这句话有点莫名其妙啊……装上boost库以后,VC6都支持boost::function,不装连VS9都不支持……
VS8和VC9是不支持C++0x的……和STL库无关吧,实际上从安全性上讲,VS9的STL好过STLPort,就是iostream比较慢,VS系列也只有VS6以下值得用STLPort代替
VS8和VC9是不支持C++0x的……和STL库无关吧,实际上从安全性上讲,VS9的STL好过STLPort,就是iostream比较慢,VS系列也只有VS6以下值得用STLPort代替
#3
呵呵,我的意思是VS 2005就已经能支持boost::function,但居然还不能支持std::function。另外很久没摸过VC 6.0了,不知道它对boost::function的支持程度。
#5
这还是C++0x的问题,function函数归到std下面也就是标准库了,这是C++0x的标准,VS8和VS9不支持0x,也就随意增加标准库,VC9 sp1的下一代就是VS2010,全面支持0x,sp1算个预览,这也就是VS2008 sp1补丁特别大的原因,增加了不少VS2010的东西。
function仅仅是个库函数,用标准C++实现的,你愿意的话自己都可以往std空间里加东西。VC能支持的库多了去了,难道说只要能支持的就加进标准库么?
function仅仅是个库函数,用标准C++实现的,你愿意的话自己都可以往std空间里加东西。VC能支持的库多了去了,难道说只要能支持的就加进标准库么?
#6
boost是在GNU环境下实现的,VC只是“附带支持”;同理ACE库的Windows支持能力就强过linux。
此外要声明的是,boost::bind的问题责任方在boost不在VC,是boost没有考虑好VC的支持,不是VC不支持标准,对于C++98标准,VC2003以上版本远比gcc要忠实。
为什么ACE的bind,就没有问题?想想看,linux移植过来的程序,基本没有在Windows下真正立足的
#7
多谢大侠,受教了!
#1
原来如此
#2
“VS2005就能支持boost::function”这句话有点莫名其妙啊……装上boost库以后,VC6都支持boost::function,不装连VS9都不支持……
VS8和VC9是不支持C++0x的……和STL库无关吧,实际上从安全性上讲,VS9的STL好过STLPort,就是iostream比较慢,VS系列也只有VS6以下值得用STLPort代替
VS8和VC9是不支持C++0x的……和STL库无关吧,实际上从安全性上讲,VS9的STL好过STLPort,就是iostream比较慢,VS系列也只有VS6以下值得用STLPort代替
#3
呵呵,我的意思是VS 2005就已经能支持boost::function,但居然还不能支持std::function。另外很久没摸过VC 6.0了,不知道它对boost::function的支持程度。
#4
#5
这还是C++0x的问题,function函数归到std下面也就是标准库了,这是C++0x的标准,VS8和VS9不支持0x,也就随意增加标准库,VC9 sp1的下一代就是VS2010,全面支持0x,sp1算个预览,这也就是VS2008 sp1补丁特别大的原因,增加了不少VS2010的东西。
function仅仅是个库函数,用标准C++实现的,你愿意的话自己都可以往std空间里加东西。VC能支持的库多了去了,难道说只要能支持的就加进标准库么?
function仅仅是个库函数,用标准C++实现的,你愿意的话自己都可以往std空间里加东西。VC能支持的库多了去了,难道说只要能支持的就加进标准库么?
#6
boost是在GNU环境下实现的,VC只是“附带支持”;同理ACE库的Windows支持能力就强过linux。
此外要声明的是,boost::bind的问题责任方在boost不在VC,是boost没有考虑好VC的支持,不是VC不支持标准,对于C++98标准,VC2003以上版本远比gcc要忠实。
为什么ACE的bind,就没有问题?想想看,linux移植过来的程序,基本没有在Windows下真正立足的
#7
多谢大侠,受教了!