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).