2
|
Raindog · 技术社区 · 16 年前 |
![]() |
1
3
经过一番努力,我想出了这个解决方案:
它要求我更改get_connectivity_data以返回std::vector而不是引用一个,还要求我将块的元素更改为boost::shared_ptr而不是loki::smartptr。 |
![]() |
2
2
我认为您认为最好的做法是保持代码不变是正确的。如果你很难理解(a)你在写它,(b)你理解你正试图解决的确切问题,想象一下,如果有人在3年后出现,并且必须理解你写的问题和解决方案,这将是多么困难。 |
![]() |
3
2
如果没有看到整个类的代码,就很难确定什么是有效的。就我个人而言,我认为在这种情况下,Boost ForEach更干净,但为了参考起见,我可能会尝试使用lambdas执行类似的操作(注意,我无法测试编译)
|
![]() |
4
1
关于lambda,我真的不知道你在说什么,但是我可以对涉及STL容器的代码清理提出一些一般性的建议。 使用所有STL容器类型的typedef:
既然你在谈论使用Boost,就用 Boost.Foreach :
在黑暗中刺伤“lambda”的东西:
然后你可以这样称呼它:
|
![]() |
5
1
实际上,您正在对两个容器并行执行操作。这就是Boost::Zip_迭代器的设计目的。 但是,您需要并行处理容器的唯一原因是chunk::get_connectivity_data提取了一个out参数。如果要按值返回(使用异常来报告错误),可以只使用插入迭代器。 |
![]() |
6
1
出于某种原因,STL初学者总是坚持使用vector::iterator,而不是更易读(和常量时间)的操作符[]。表达式
OP还可以考虑丢失伪返回代码,并将其作为常量成员函数。 |