GNU/Linux >> Znalost Linux >  >> Linux

C++11:Jak vytvořit alias funkce?

Můžete definovat alias funkce (s trochou práce) pomocí dokonalého přesměrování:

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

Toto řešení platí, i když f je přetížený a/nebo šablona funkce.


constexpr ukazatel funkce lze použít jako alias funkce.

namespace bar
{
    int f();
}

constexpr auto g = bar::f;

Je vysoce pravděpodobné (ale není to zaručeno jazykem), že pomocí g používá bar::f přímo. Konkrétně to závisí na verzi kompilátoru a úrovni optimalizace.

Konkrétně se jedná o případ:

  • GCC 4.7.1+, bez optimalizace,
  • Clang 3.1+, bez optimalizace,
  • MSVC 19.14+ s optimalizací.

Viz sestavení generované těmito kompilátory.


Třídy jsou typy , takže je lze přiřadit pomocí typedef a using (v C++11).

Funkce jsou mnohem více jako objekty , takže neexistuje žádný mechanismus pro jejich alias. V nejlepším případě můžete použít ukazatele funkcí nebo odkazy na funkce:

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

g();
h();

Ve stejném duchu neexistuje žádný mechanismus pro alias proměnných (krátce přes ukazatele nebo odkazy).


Linux
  1. V Bash, kdy alias, kdy skript a kdy napsat funkci?

  2. Jak předat parametry aliasu?

  3. jak správně použít $1 v aliasu se dvěma argumenty

  1. Jak získat dokončování bash pro aliasy příkazů?

  2. Jak donutit cp k přepsání bez potvrzení

  3. Jak udělat funkci asynchronně-signálově bezpečnou?

  1. Jak na `alias Sudo !!`?

  2. mac jak uložit alias v počítači

  3. Jak uniknout příkazům v aliasu bashrc?