C++ 每个语句内部都有一个函数
在尝试在for_each循环中传递函数时,我不断收到错误消息。。我有一个向量,我用每个循环遍历向量中的行,现在我需要一个函数来做一些事情 示例这就是我试图实现的目标:C++ 每个语句内部都有一个函数,c++,C++,在尝试在for_each循环中传递函数时,我不断收到错误消息。。我有一个向量,我用每个循环遍历向量中的行,现在我需要一个函数来做一些事情 示例这就是我试图实现的目标: void DataPartitioning::doSomething() { for_each (label.begin(), label.end(), addToTemporaryVector()); } void DataPartitioning::addToTemporaryVector() { cout&
void DataPartitioning::doSomething()
{
for_each (label.begin(), label.end(), addToTemporaryVector());
}
void DataPartitioning::addToTemporaryVector()
{
cout<<"sucess";
}
但是我收到一条错误消息,上面写着:error:invalid use of void expression两者都在同一个类中。因为它是一个成员函数,所以需要将它包装在一个对对象调用它的functor中;可能是调用doSomething的同一对象:
for_each(label.begin(), label.end(), [this](whatever const &){addToTemporaryVector();});
其中,容器的值类型是什么
作为常规for循环,它可能更清晰:
for (whatever const & thing : label) {
addToTemporaryVector();
}
这假设您没有使用C++11之前的编译器。如果你是,它需要更多的胡言乱语:
for_each(label.begin(), label.end(),
std::bind1st(std::mem_fun(&DataPartitioning::addToTemporaryVector), this));
我不完全确定这是否适用于像您这样不带参数的函数;但您的实际代码可能需要一个参数来处理每个元素。您需要使用结构,如下所示: 请注意,运算符的输入必须与向量中的类型相同。字符串在本例中,addToTemporaryVector函数链接中的int不使用此字符串。因此可以将其声明为静态 此外,它还应以标签的模板类型作为参数 声明:
static void addToTemporaryVector(const SomeType & item);
那么就做:
//No parentheses to the function pointer
for_each (label.begin(), label.end(), addToTemporaryVector);
您需要传递函数,而不是调用函数的结果。但是请注意,传递成员函数是很棘手的,因为它需要一个对象来执行操作。那么您的意思是,我应该创建一个结构并将函数包含在其中吗?@George您应该这样做:@George:或者使用lambda、std::bind或常规for-loop。如果您的编译器支持它。
//No parentheses to the function pointer
for_each (label.begin(), label.end(), addToTemporaryVector);