<small id='B8q32'></small><noframes id='B8q32'>

  • <i id='B8q32'><tr id='B8q32'><dt id='B8q32'><q id='B8q32'><span id='B8q32'><b id='B8q32'><form id='B8q32'><ins id='B8q32'></ins><ul id='B8q32'></ul><sub id='B8q32'></sub></form><legend id='B8q32'></legend><bdo id='B8q32'><pre id='B8q32'><center id='B8q32'></center></pre></bdo></b><th id='B8q32'></th></span></q></dt></tr></i><div id='B8q32'><tfoot id='B8q32'></tfoot><dl id='B8q32'><fieldset id='B8q32'></fieldset></dl></div>

        <tfoot id='B8q32'></tfoot>
      1. <legend id='B8q32'><style id='B8q32'><dir id='B8q32'><q id='B8q32'></q></dir></style></legend>
          <bdo id='B8q32'></bdo><ul id='B8q32'></ul>

        std::remove_if 使用其他类方法

        时间:2023-07-01

        <tfoot id='wplhd'></tfoot>
          • <bdo id='wplhd'></bdo><ul id='wplhd'></ul>
            • <legend id='wplhd'><style id='wplhd'><dir id='wplhd'><q id='wplhd'></q></dir></style></legend>
            • <i id='wplhd'><tr id='wplhd'><dt id='wplhd'><q id='wplhd'><span id='wplhd'><b id='wplhd'><form id='wplhd'><ins id='wplhd'></ins><ul id='wplhd'></ul><sub id='wplhd'></sub></form><legend id='wplhd'></legend><bdo id='wplhd'><pre id='wplhd'><center id='wplhd'></center></pre></bdo></b><th id='wplhd'></th></span></q></dt></tr></i><div id='wplhd'><tfoot id='wplhd'></tfoot><dl id='wplhd'><fieldset id='wplhd'></fieldset></dl></div>

                  <small id='wplhd'></small><noframes id='wplhd'>

                    <tbody id='wplhd'></tbody>
                  本文介绍了std::remove_if 使用其他类方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我想将 std::remove_if 与作为差异类成员函数的谓词一起使用.

                  I want to use std::remove_if with a predicate that is a member function of a differenct calss.

                  那就是

                  class B;
                  
                  class A {
                      bool invalidB( const B& b ) const; // use members of class A to verify that B is invalid
                      void someMethod() ;
                  };
                  

                  现在,实现A::someMethod,我有

                  void A::someMethod() {
                      std::vector< B > vectorB; 
                      // filling it with elements
                  
                      // I want to remove_if from vectorB based on predicate A::invalidB
                      std::remove_if( vectorB.begin(), vectorB.end(), invalidB )
                  }
                  

                  有没有办法做到这一点?

                  Is there a way to do this?

                  我已经研究了解决方案用于 remove_if 的惯用 C++,但它处理的情况略有不同,即remove_ifB 而不是 A 的成员.

                  I have already looked into the solution of Idiomatic C++ for remove_if, but it deals with a slightly different case where the unary predicate of remove_if is a member of Band not A.

                  此外,
                  我无权使用 BOOST 或 c++11

                  Moreover,
                  I do not have access to BOOST or c++11

                  谢谢!

                  推荐答案

                  一旦你在 remove_if 中,你就失去了 this 指针A.所以你必须声明一个功能对象,它包含它,例如:

                  Once you're in remove_if, you've lost the this pointer of A. So you'll have to declare a functional object which holds it, something like:

                  class IsInvalidB
                  {
                      A const* myOwner;
                  public:
                      IsInvalidB( A const& owner ) : myOwner( owner ) {}
                      bool operator()( B const& obj )
                      {
                          return myOwner->invalidB( obj );
                      }
                  }
                  

                  只需将它的一个实例传递给 remove_if.

                  Just pass an instance of this to remove_if.

                  这篇关于std::remove_if 使用其他类方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  上一篇:Postfix运算符重载中虚拟参数的目的?C++ 下一篇:为什么类方法不能调用同名的全局函数?

                  相关文章

                    <tfoot id='J3G0U'></tfoot>
                  1. <i id='J3G0U'><tr id='J3G0U'><dt id='J3G0U'><q id='J3G0U'><span id='J3G0U'><b id='J3G0U'><form id='J3G0U'><ins id='J3G0U'></ins><ul id='J3G0U'></ul><sub id='J3G0U'></sub></form><legend id='J3G0U'></legend><bdo id='J3G0U'><pre id='J3G0U'><center id='J3G0U'></center></pre></bdo></b><th id='J3G0U'></th></span></q></dt></tr></i><div id='J3G0U'><tfoot id='J3G0U'></tfoot><dl id='J3G0U'><fieldset id='J3G0U'></fieldset></dl></div>

                      <small id='J3G0U'></small><noframes id='J3G0U'>

                      <legend id='J3G0U'><style id='J3G0U'><dir id='J3G0U'><q id='J3G0U'></q></dir></style></legend>

                        <bdo id='J3G0U'></bdo><ul id='J3G0U'></ul>