GNU/Linux >> LINUX-Kenntnisse >  >> Linux

C++11:Wie aliasiert man eine Funktion?

Sie können einen Funktionsalias (mit etwas Arbeit) mit perfekter Weiterleitung definieren:

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

Diese Lösung gilt auch, wenn f ist überladen und/oder eine Funktionsvorlage.


Die constexpr Funktionszeiger kann als Funktionsalias verwendet werden.

namespace bar
{
    int f();
}

constexpr auto g = bar::f;

Es ist sehr wahrscheinlich (aber nicht durch die Sprache garantiert), dass die Verwendung von g verwendet bar::f direkt. Konkret hängt dies von der Compilerversion und dem Optimierungsgrad ab.

Dies gilt insbesondere für:

  • GCC 4.7.1+, ohne Optimierung,
  • Clang 3.1+, ohne Optimierung,
  • MSVC 19.14+, mit Optimierung.

Siehe Assembly, die von diesen Compilern generiert wird.


Klassen sind Typen , sodass sie mit typedef aliasiert werden können und using (in C++11).

Funktionen sind viel mehr wie Objekte , also gibt es keinen Mechanismus, um sie zu aliasieren. Bestenfalls können Sie Funktionszeiger oder Funktionsreferenzen verwenden:

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

g();
h();

Ebenso gibt es keinen Mechanismus zum Aliasing von Variablen (kurz für Durchgangszeiger oder Referenzen).


Linux
  1. Wann soll in Bash ein Alias, wann ein Skript und wann eine Funktion geschrieben werden?

  2. Wie übergebe ich Parameter an einen Alias?

  3. Wie funktioniert eine Gabelbombe?

  4. Wie macht man eine Funktion async-signalsicher?

  5. Wie kann man Befehlen in einem Bashrc-Alias ​​entkommen?

So erstellen Sie Bash-Aliase

So erstellen Sie einen SSH-Alias ​​unter Linux

So erstellen Sie einen Alias ​​unter Linux

So erstellen Sie Domain-Aliase

So erstellen Sie einen Domain-Alias ​​in cPanel

So führen Sie einen Alias ​​mit Sudo in Linux aus