我可以用 bind1st/2nd 替换 boost::bind 吗?

发布于 2024-12-11 18:40:29 字数 443 浏览 0 评论 0原文

为了更好地理解,我可以用 std::bind1st/2nd 替换以下示例中对 boost::bind 的调用吗?或者因为返回引用而无法实现?

示例(缩短):

class Pos
{
public:
bool operator==( const Pos& );
...
}

class X
{
public:
const Pos& getPos()  { return m_p; }
...
private:
Pos m_p;
}

...
Pos position;
std::vector<X> v;
std::vector<X>::iterator iter;
...

iter = std::find_if( v.begin(), v.end(), boost::bind( &X::getPos, _1 ) == position );
...

Just for better understanding, can I replace the call to boost::bind in the following example with std::bind1st/2nd? Or is it not possible because of returning a reference?

Example(shortened):

class Pos
{
public:
bool operator==( const Pos& );
...
}

class X
{
public:
const Pos& getPos()  { return m_p; }
...
private:
Pos m_p;
}

...
Pos position;
std::vector<X> v;
std::vector<X>::iterator iter;
...

iter = std::find_if( v.begin(), v.end(), boost::bind( &X::getPos, _1 ) == position );
...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

维持三分热 2024-12-18 18:40:29

这是不可能的,因为 bind1stbind2nd 都不会像 bind 那样重载 operator== (以产生另一个函子) 。如果你不想使用bind,你需要自己编写函子,或者使用lambda。

It's not possible, because neither bind1st nor bind2nd overloads operator== like bind does (to yield another functor). If you don't want to use bind, you need to write the functor yourself, or use a lambda.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文