Os ponteiros de função fornecem uma maneira de se referir a funções do operador. No entanto, para operadores padrão integrados, esta abordagem pode não ser simples. Este artigo investiga as razões por trás dessa limitação e explora soluções alternativas para obter funcionalidades semelhantes.
De acordo com o padrão C (13.6/ 1), os operadores integrados não são funções de operador regulares e, portanto, não podem ter ponteiros de função apontando para eles. Eles participam apenas da resolução de sobrecarga sem servir a qualquer outro propósito. operadores por meio de objetos de modelo. Por exemplo, para comparações, são definidos objetos de função como igual_a, maior e menor_equal. Esses objetos podem ser usados como argumentos de ponteiro de função.
No trecho de código fornecido, o objetivo é comparar dois números inteiros dentro de uma classe de modelo. Usando a técnica de objetos de função, isso pode ser alcançado da seguinte forma:
class MyAction { operador bool()() { if (fnCompare_(arg0_, arg1_)) { //faça isso } outro { // faça algo. outro } } };Aqui, fnCompare_ pode ser um objeto de função como std::equal_toclass MyAction {
bool operator()() {
if (fnCompare_(arg0_, arg1_)) {
// do this
} else {
// do s.th. else
}
}
};
Além de objetos de função , os operadores de biblioteca padrão também podem ser usados como ponteiros de função. No entanto, a respectiva instância do modelo deve ser referenciada. Por exemplo:
std::basic_stringstd::basic_string a("test"), b("test2");
std::cout >(a, b, &std::operator );
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3