Tenho uma classe com método sobrecarregado:
#include <iostream>
#include <utility>
struct Overloads {
void foo() {
std::cout << "foo" << std::endl;
}
void foo() const {
std::cout << "const foo" << std::endl;
}
};
Eu sei que posso trabalhar com ponteiros para funções membro ( &Overloads::foo
). Como a função está sobrecarregada aqui, static_cast
deve ser feito um:
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
}
Entendi, como obter um functor para foo não-const. Como posso obter um para sobrecarga de foo const?
Você só precisa adicionar o
const
qualificador - ao tipo de função no tipo de ponteiro da função membro, exatamente na mesma posição da declaração da função membro: