Anda dapat menentukan alias fungsi (dengan beberapa pekerjaan) menggunakan penerusan sempurna:
template <typename... Args>
auto g(Args&&... args) -> decltype(f(std::forward<Args>(args)...)) {
return f(std::forward<Args>(args)...);
}
Solusi ini berlaku meskipun f
kelebihan beban dan/atau template fungsi.
constexpr
penunjuk fungsi dapat digunakan sebagai alias fungsi.
namespace bar
{
int f();
}
constexpr auto g = bar::f;
Sangat mungkin (tetapi tidak dijamin oleh bahasa) yang menggunakan g
menggunakan bar::f
secara langsung. Secara khusus, ini bergantung pada versi kompiler dan tingkat pengoptimalan.
Secara khusus, ini berlaku untuk:
- GCC 4.7.1+, tanpa pengoptimalan,
- Dentang 3.1+, tanpa pengoptimalan,
- MSVC 19.14+, dengan pengoptimalan.
Lihat rakitan yang dihasilkan oleh kompiler ini.
Kelas adalah tipe , sehingga dapat di-alias dengan typedef
dan using
(dalam C++11).
Fungsi jauh lebih seperti objek , jadi tidak ada mekanisme untuk membuat alias mereka. Paling-paling Anda bisa menggunakan penunjuk fungsi atau referensi fungsi:
void (*g)() = &bar::f;
void (&h)() = bar::f;
g();
h();
Dengan nada yang sama, tidak ada mekanisme untuk membuat alias variabel (kependekan dari pointer atau referensi).