nsf*_*way 1 c++ templates loops function
我最近写了一个简单的宏,因为我厌倦了为每个需要循环的向量输入相同的东西:
#define FORVEC(a,b) for(int b=0;b<a.size();b++)
Run Code Online (Sandbox Code Playgroud)
所以我可以做点什么
vector<sometype> stuff
FORVEC(stuff,i)
{
stuff[i].dosomething();
}
Run Code Online (Sandbox Code Playgroud)
我尽量避免使用宏,因为有一次我被一位经验丰富的程序员告知我尽可能避免使用宏.另外,我只是对如何使用函数(或者它需要的任何东西)感到好奇,因为这是我想要探索的领域.不是特别重新创建这个宏,虽然这将是一个良好的开端,但在定义它之后,我可以做类似的事情
mylooperfunction(param1,param2,param3)
{
//and now any code here would be run and looped in a way controlled by and defined in mylooperfunction
}
Run Code Online (Sandbox Code Playgroud)
BOOST_FOREACH你可以在C++ 03中使用更高级的版本.什么你说的是不是在C++ 03,但是是 C++ 0x中引进lambda表达式.
std::for_each(vec.begin(), vec.end(), [&](const T& ref) {
ref.do_something();
});
Run Code Online (Sandbox Code Playgroud)
特别是对于这种用途,甚至还有一种新的语言功能,在我看来这是一个可怕的错误,但那只是我.上面的代码更通用.