命名空间std没有bind1st成员?

3

我在尝试使用for_each迭代遍历指向向量的指针时遇到了奇怪的错误。
我想要对这些指针中的每一个调用一个方法。

objects_的类型为vector<someClass*>

for_each(objects_.begin(), objects_.end(), std::bind1st(std::mem_fun(&someClass::someMethod), this));

但是这段代码甚至都无法编译,因为:

error C2039: 'bind1st' : is not a member of 'std'
error C2039: 'mem_fun' : is not a member of 'std'
error C3861: 'bind1st': identifier not found
error C3861: 'mem_fun': identifier not found

然而其他STL算法和方法都能正常工作。

我是不是漏掉了什么?


3
你有包含 <functional> 库吗? - Piotr Skotnicki
@PiotrS. 我对这些东西还很新,那就是问题所在,谢谢。请添加您的答案,我会为您节省时间而点赞。 - singe3
1个回答

9

std::bind1ststd::mem_fn位于头文件<functional>中,只要您包含该文件,它们将对您的翻译单元可见:

#include <functional>

另外,请注意 std::bind1st 已被弃用,您应该使用lambda表达式或更灵活的std::bind


2
在撰写本文时(2020年),在clang 9下使用C++-17标准进行编译,bind1st等的用法必须被重写,因为它不仅已经被弃用,而且已经被移除。 - V.S.
1
不建议使用,但可以通过以下方式强制Clang使用已弃用的内容:-D_LIBCPP_ENABLE_CXX17_REMOVED_FEATURES - Nehal J Wani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接