未定义标识符 "mem_fn"
时间: 2023-08-14 13:13:00 浏览: 103
`mem_fn` 是 C++ 标准库 `<functional>` 中的一个函数模板,用于创建成员函数指针的包装器。它可以用于存储、复制和调用成员函数指针,并且可以与算法和函数对象一起使用。
要使用 `mem_fn`,您需要包含 `<functional>` 头文件,并确保您的编译器支持 C++11 或更高版本。
下面是一个使用 `mem_fn` 的示例:
```cpp
#include <iostream>
#include <functional>
struct Foo {
void bar() {
std::cout << "Hello, World!" << std::endl;
}
};
int main() {
Foo foo;
auto fn = std::mem_fn(&Foo::bar);
fn(foo); // 调用成员函数指针
return 0;
}
```
请检查您的代码是否正确包含了 `<functional>` 头文件,并且您的编译器版本是否支持 C++11 或更高版本。如果问题仍然存在,请提供更多的上下文和代码,以便我能够更好地帮助您解决问题。
相关问题
‘mem_fn’ is not a member of ‘std’ std::for_each(template_threads.begin(), template_threads.end(), std::mem_fn(&std::thread::join));
这个错误提示表明在当前的作用域下,`std::mem_fn`并不是一个可用的成员。这可能是由于你的编译器版本过低导致的。
`std::mem_fn`是C++11标准引入的函数对象,其目的是将一个成员函数转换为一个可调用对象,以便可以将其用于STL算法中。如果你的编译器不支持C++11标准,那么你需要升级你的编译器或者使用其他的实现方式来调用`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 返回的是一个可调用对象,而不是指针或引用。因此,你可以将它直接调用,也可以将它存储在变量中后再调用。
希望能解答你的问题!如果还有其他问题,请继续提问。
阅读全文