在下面的代码中,我如何使用 std::for_each 指令重写 for 循环。
我尝试使用 boost::lambda::_1
、boost::bind
,但无法使其正常工作。
#include <vector>
#include <iostream>
#include <cstring>
#include <cstdlib>
int main()
{
std::vector<int(*)(const char*)> processors;
processors.push_back(std::atoi);
processors.push_back(reinterpret_cast<int(*)(const char*)>(std::strlen));
const char data[] = "1.23";
for(std::vector<int(*)(const char*)>::iterator it = processors.begin();
it != processors.end(); ++it)
std::cout << (*it)(data) << std::endl;
}
欢迎任何帮助我解决这个问题的提示。
编辑:解决方案
#include <vector>
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <boost/function.hpp>
#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
int main()
{
std::vector<boost::function<int(const char*)> > processors;
processors.push_back(std::atoi);
processors.push_back(std::strlen);
const char data[] = "1.23";
namespace bl = boost::lambda;
std::for_each(processors.begin(), processors.end(),
std::cout << bl::bind(bl::_1, data) << "\n");
}
最佳答案
如果 boost::lambda
和 '\n'
而不是 endl
被允许,是否允许
下面的代码能达到目的吗?
namespace bl = boost::lambda;
std::for_each( processors.begin(), processors.end()
, std::cout << bl::bind( bl::_1, data ) << '\n' );
关于c++ - 如何在函数指针列表上使用 std::for_each,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5838679/