GNU/Linux >> Linux の 問題 >  >> Linux

C++11:関数をエイリアスする方法は?

完全転送を使用して関数エイリアスを定義できます (多少の作業が必要です):

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

f の場合でも、この解決策は適用されます オーバーロードおよび/または関数テンプレートです。


constexpr 関数ポインタは関数エイリアスとして使用できます。

namespace bar
{
    int f();
}

constexpr auto g = bar::f;

g を使用する可能性が非常に高い (ただし、言語によって保証されているわけではありません)。 bar::f を使用 具体的には、これはコンパイラのバージョンと最適化レベルに依存します。

特に、これは次の場合に当てはまります:

  • GCC 4.7.1+、最適化なし
  • Clang 3.1+、最適化なし
  • 最適化された MSVC 19.14+。

これらのコンパイラによって生成されたアセンブリを参照してください。


クラスはです 、したがって typedef でエイリアスできます および using (C++11)

関数はオブジェクトによく似ています であるため、エイリアスを設定するメカニズムはありません。せいぜい、関数ポインタまたは関数参照を使用できます:

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

g();
h();

同様に、変数をエイリアシングするメカニズムもありません (スルー ポインターまたは参照の略)


Linux
  1. パラメータをエイリアスに渡す方法は?

  2. `alias Sudo !!`の方法は?

  3. コマンドエイリアスのBash補完を取得する方法は?

  1. Bashでは、いつエイリアスを作成し、いつスクリプトを作成し、いつ関数を作成するのですか?

  2. mac コンピュータにエイリアスを保存する方法

  3. bashrcエイリアスでコマンドをエスケープするには?

  1. フォーク爆弾はどのように機能しますか?

  2. 確認なしで cp に強制的に上書きさせる方法

  3. 関数を async-signal-safe にする方法は?