1. <tfoot id='XulHX'></tfoot>

    2. <legend id='XulHX'><style id='XulHX'><dir id='XulHX'><q id='XulHX'></q></dir></style></legend>

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

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

      如何指定指向重载函数的指针?

      时间:2024-05-12
    3. <legend id='hggnd'><style id='hggnd'><dir id='hggnd'><q id='hggnd'></q></dir></style></legend>
        1. <i id='hggnd'><tr id='hggnd'><dt id='hggnd'><q id='hggnd'><span id='hggnd'><b id='hggnd'><form id='hggnd'><ins id='hggnd'></ins><ul id='hggnd'></ul><sub id='hggnd'></sub></form><legend id='hggnd'></legend><bdo id='hggnd'><pre id='hggnd'><center id='hggnd'></center></pre></bdo></b><th id='hggnd'></th></span></q></dt></tr></i><div id='hggnd'><tfoot id='hggnd'></tfoot><dl id='hggnd'><fieldset id='hggnd'></fieldset></dl></div>
            <bdo id='hggnd'></bdo><ul id='hggnd'></ul>
            <tfoot id='hggnd'></tfoot>

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

                <tbody id='hggnd'></tbody>

                本文介绍了如何指定指向重载函数的指针?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                我想将重载函数传递给 std::for_each() 算法.例如,

                I want to pass an overloaded function to the std::for_each() algorithm. For example,

                class A {
                    void f(char c);
                    void f(int i);
                
                    void scan(const std::string& s) {
                        std::for_each(s.begin(), s.end(), f);
                    }
                };
                

                我希望编译器通过迭代器类型解析 f().显然,它(GCC 4.1.2)没有这样做.那么,如何指定我想要的 f() ?

                I'd expect the compiler to resolve f() by the iterator type. Apparently, it (GCC 4.1.2) doesn't do it. So, how can I specify which f() I want?

                推荐答案

                可以使用static_cast<>()根据函数指定使用哪个f函数指针类型隐含的签名:

                You can use static_cast<>() to specify which f to use according to the function signature implied by the function pointer type:

                // Uses the void f(char c); overload
                std::for_each(s.begin(), s.end(), static_cast<void (*)(char)>(&f));
                // Uses the void f(int i); overload
                std::for_each(s.begin(), s.end(), static_cast<void (*)(int)>(&f)); 
                

                或者,您也可以这样做:

                Or, you can also do this:

                // The compiler will figure out which f to use according to
                // the function pointer declaration.
                void (*fpc)(char) = &f;
                std::for_each(s.begin(), s.end(), fpc); // Uses the void f(char c); overload
                void (*fpi)(int) = &f;
                std::for_each(s.begin(), s.end(), fpi); // Uses the void f(int i); overload
                

                如果f是成员函数,则需要使用mem_fun,或者对于您的情况,请使用 本博士中提出的解决方案. 多布的文章.

                If f is a member function, then you need to use mem_fun, or for your case, use the solution presented in this Dr. Dobb's article.

                这篇关于如何指定指向重载函数的指针?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                上一篇:如何使用 C++ 在 ActiveDirectory 中获取 maxpwdAge 属性值? 下一篇:C++ std::set 更新很乏味:我无法就地更改元素

                相关文章

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

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

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