代码之家  ›  专栏  ›  技术社区  ›  Георгий Гуминов

方法指针强制转换时如何选择const方法重载[重复]

  •  0
  • Георгий Гуминов  · 技术社区  · 10 月前

    我有一个重载方法的类:

    #include <iostream>
    #include <utility>
    
    struct Overloads {
        void foo() {
            std::cout << "foo" << std::endl;
        }
    
        void foo() const {
            std::cout << "const foo" << std::endl;
        }
    };
    

    我知道我可以使用指向成员函数的指针( &Overloads::foo ). 由于这里函数重载 static_cast 必须:

    int main() {
    
        auto overloads = Overloads{};
    
        auto foo_func = static_cast<void (Overloads::*)()>(&Overloads::foo);
    
        (overloads.*foo_func)();  // foo is printed - as expected
    
        // No idea where to put const and why:
        // auto const_foo_func = static_cast<void (Overloads::*) ()>(&Overloads::foo);
    
        //(overloads.*const_foo_func)();  // const foo output is expected
    }
    

    我明白了,如何为非const foo获取一个functor。如何为const foo重载获取一个?

    1 回复  |  直到 10 月前
        1
  •  3
  •   user17732522    10 月前

    你只需要添加 const -成员函数指针类型中函数类型的限定符,与成员函数声明中的位置完全相同:

    auto const_foo_func = static_cast<void (Overloads::*)() const>(&Overloads::foo);