首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么把std:for_each用的函数对象,一起写在函数内部

2012-04-24 
如何把std::for_each用的函数对象,一起写在函数内部?如题,以下代码是为了把相关代码写在一起,但编译时报错

如何把std::for_each用的函数对象,一起写在函数内部?
如题,以下代码是为了把相关代码写在一起,但编译时报错:
error C2918: 'XXX::MY_FUNC' : illegal use of local type in template instantiation
看MSDN说是:在模板实例化中非法使用局部类型,无法基于局部类型生成模板函数(即来自函数模板的函数)。用于实例化模板的类型必须有外部链接。


vector<MY_ITEM> vi;
struct MY_FUNC
{
public:
void operator() (MY_ITEM& elem)
{
}
};
for_each(vi.begin(), vi.end(), MY_FUNC());


但之前看到过代码是把函数对象写在函数内部,忘了是怎么实现的,是否有朋友知道?谢了!

[解决办法]
lz说的是这个意思么?

Assembly code
#include <iostream>#include <vector>using namespace std;template<typename T>struct MY_FUNC{        public:                void operator() (typename T::value_type & elem)                {                }};int main(){        vector<int> vec;        for_each(vec.begin(), vec.end(), MY_FUNC<vector<int> >());        return 0;}
[解决办法]
探讨
回复各位朋友:

我是想把这些代码都放到函数内部,包括函数对象。

boost::lambda的相关资料我过会儿看看,

继承自unary_function<MY_ITEM,void>不管用,代码如下,各位可以复制到看书代码中编译一下:

C/C++ code

int main(int argc, char *argv[])
{
vector<int> vi;
……

[解决办法]
gcc试了试,好像这跟寒暑对象只能在函数外部定义。

[解决办法]
探讨

确实,VS2005也能编译通过,g++编译不能通过。
但是,之前公司用我这种代码在Linux g++编译通过,当时没有留意是怎么实现的。

回楼上,不该用gcc而要用g++吧。

[解决办法]
那就换个编程语言吧。
不要和c++标准对抗。
语法糖也没这么重要。
探讨

不想把函数对象放到外部,是因为只有内部用到,不想让外部看到,封装性不好。

热点排行
Bad Request.