"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > ## Você consegue obter ponteiros de função para operadores C++ integrados?

## Você consegue obter ponteiros de função para operadores C++ integrados?

Publicado em 2024-11-08
Navegar:906

## Can You Get Function Pointers for Built-in C   Operators?

É possível obter o ponteiro de função de um operador padrão integrado?

Introdução

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.

Por que ponteiros de função não estão disponíveis para operadores integrados

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.

Exemplo

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_to para realizar a comparação.
class 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_string a("test"), b("test2"); std::cout >(a, b, &std::operator );

Conclusão
std::basic_string a("test"), b("test2");
std::cout >(a, b, &std::operator );
Tutorial mais recente Mais>

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