‘mem_fn’ is not a member of ‘std’ std::for_each(template_threads.begin(), template_threads.end(), std::mem_fn(&std::thread::join));
时间: 2024-04-23 19:25:12 浏览: 6
这个错误提示表明在当前的作用域下,`std::mem_fn`并不是一个可用的成员。这可能是由于你的编译器版本过低导致的。
`std::mem_fn`是C++11标准引入的函数对象,其目的是将一个成员函数转换为一个可调用对象,以便可以将其用于STL算法中。如果你的编译器不支持C++11标准,那么你需要升级你的编译器或者使用其他的实现方式来调用`join`函数。
相关问题
note: suggested alternative: ‘mem_fun’ std::for_each(template_threads.begin(), template_threads.end(), std::mem_fn(&std::thread::join));
这个错误提示建议你可以考虑使用`std::mem_fun`作为`std::for_each`的第三个参数,而不是使用`std::mem_fn`。
`std::mem_fun`也是一个函数对象,可以将一个成员函数转换为一个可调用对象。但与`std::mem_fn`不同的是,`std::mem_fun`是C++98标准引入的函数对象,可以在早期版本的C++编译器中使用。因此,如果你的编译器版本过低,可以尝试使用`std::mem_fun`替代`std::mem_fn`来解决问题。
使用`std::mem_fun`的示例代码如下:
```
std::for_each(template_threads.begin(), template_threads.end(), std::mem_fun(&std::thread::join));
```
这样做应该可以解决你遇到的问题。
std::mem_fn
std::mem_fn 是 C++ 标准库中的一个函数模,用于将成员函数指针或可用对象转化为一个可调用对象。可以用于将成员函数包装成一个对象,使得可以在不直接调用员函数的情况下使用它。
使用 stdmem_fn,你可以将成员函数指针可调用对象绑定到特定的对象上,然后通过调用这可调用对象来调相应的成员函数。这涉及到回调函数需要传递成员的情况下非常有用。
例如,如果有一个类对象 obj 和一个成员函数 void func(),你可以使用 std::mem_fn 将 func 绑定到 obj 上,然后通过调用可调用对象来调用成员函数:
```
std::mem_fn(&Class::func)(obj);
```
这样就可以通过调用对象来调用成员函数 func 而不需要直接使用 obj.func()。
需要注意的是,std::mem_fn 返回的是一个可调用对象,而不是指针或引用。因此,你可以将它直接调用,也可以将它存储在变量中后再调用。
希望能解答你的问题!如果还有其他问题,请继续提问。