GNU/Linux >> Tutoriels Linux >  >> Linux

C++11 :Comment aliaser une fonction ?

Vous pouvez définir un alias de fonction (avec un peu de travail) en utilisant la redirection parfaite :

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

Cette solution s'applique même si f est surchargé et/ou un modèle de fonction.


Le constexpr le pointeur de fonction peut être utilisé comme alias de fonction.

namespace bar
{
    int f();
}

constexpr auto g = bar::f;

Il est fort probable (mais non garanti par le langage) que l'utilisation de g utilise bar::f directement. Plus précisément, cela dépend de la version du compilateur et du niveau d'optimisation.

C'est notamment le cas pour :

  • GCC 4.7.1+, sans optimisation,
  • Clang 3.1+, sans optimisation,
  • MSVC 19.14+, avec optimisation.

Voir l'assembly généré par ces compilateurs.


Les classes sont des types , afin qu'ils puissent être aliasés avec typedef et using (en C++11).

Les fonctions ressemblent beaucoup plus à des objets , il n'y a donc aucun mécanisme pour leur attribuer un alias. Au mieux, vous pouvez utiliser des pointeurs de fonction ou des références de fonction :

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

g();
h();

Dans le même esprit, il n'y a pas de mécanisme pour aliaser les variables (à court de pointeurs ou de références).


Linux
  1. Dans Bash, quand créer un alias, quand créer un script et quand écrire une fonction ?

  2. Comment fonctionne une fourche bombe ?

  3. Comment forcer cp à écraser sans confirmation

  4. Comment rendre une fonction async-signal-safe ?

  5. mac comment enregistrer un alias sur un ordinateur

Comment créer des alias Bash

Comment créer un alias SSH sous Linux

Comment créer un alias sous Linux

Comment créer des alias de domaine

Comment créer un alias de domaine dans cPanel

Comment exécuter un alias avec Sudo sous Linux