GNU/Linux >> Linux Esercitazione >  >> Linux

C++11:come creare un alias per una funzione?

Puoi definire un alias di funzione (con un po' di lavoro) usando l'inoltro perfetto:

template <typename... Args>
auto g(Args&&... args) -> decltype(f(std::forward<Args>(args)...)) {
  return f(std::forward<Args>(args)...);
}

Questa soluzione si applica anche se f è sovraccarico e/o un modello di funzione.


L'constexpr il puntatore di funzione può essere utilizzato come alias di funzione.

namespace bar
{
    int f();
}

constexpr auto g = bar::f;

È molto probabile (ma non garantito dal linguaggio) che l'utilizzo di g utilizza bar::f direttamente.In particolare, questo dipende dalla versione del compilatore e dal livello di ottimizzazione.

In particolare, questo è il caso di:

  • GCC 4.7.1+, senza ottimizzazione,
  • Clang 3.1+, senza ottimizzazione,
  • MSVC 19.14+, con ottimizzazione.

Guarda l'assembly generato da questi compilatori.


Le classi sono tipi , quindi possono essere aliasati con typedef e using (in C++11).

Le funzioni sono molto più simili agli oggetti , quindi non c'è alcun meccanismo per crearne l'alias. Nella migliore delle ipotesi potresti usare puntatori a funzioni o riferimenti a funzioni:

void (*g)() = &bar::f;
void (&h)() = bar::f;

g();
h();

Allo stesso modo, non c'è alcun meccanismo per aliasare le variabili (a corto di puntatori o riferimenti passanti).


Linux
  1. Come passare i parametri a un alias?

  2. Come `alias Sudo !!`?

  3. Come ottenere il completamento di Bash per gli alias di comando?

  4. Come forzare cp a sovrascrivere senza conferma

  5. mac come salvare alias nel computer

Come creare alias Bash

Come creare alias SSH in Linux

Come creare un alias in Linux

Come creare alias di dominio

Come creare un alias di dominio in cPanel

Come eseguire un alias con Sudo in Linux