1. ホーム
  2. c++

c++11を使った重複コード

2023-07-09 12:45:02

質問

現在、あるプロジェクトに取り組んでいますが、次のような問題があります。

私は2つの異なる方法で動作させたいC++メソッドを持っています。

void MyFunction()
{
  foo();
  bar();
  foobar();
}

void MyFunctionWithABonus()
{
  foo();
  bar();
  doBonusStuff();
  foobar();
}

そして、実際の関数はもっと長いので、私のコードを重複させたくありません。 問題は、MyFunctionWithABonusの代わりにMyFunctionが呼び出されたときに、いかなる状況でもプログラムの実行時間を追加してはいけないということです。それが、私がC++の比較でチェックするブール値のパラメータを持つことができない理由です。

私の考えは、私のコードを事実上複製するために C++ テンプレートを使用することでしたが、追加の実行時間がなく、コードを複製する必要がないような方法を思いつきません。

私はテンプレートの専門家ではないので、何かを見逃しているかもしれません。

どなたかお分かりになる方はいらっしゃいますか?それともC++11では不可能なことなのでしょうか?

どのように解決するのですか?

テンプレートとラムダを使うことで、解決できるかもしれません。

template <typename F>
void common(F f)
{
  foo();
  bar();
  f();
  foobar();
}

void MyFunction()
{
    common([](){});
}

void MyFunctionWithABonus()
{
  common(&doBonusStuff);
}

を作成するか、あるいは prefixsuffix という関数があります。

void prefix()
{
  foo();
  bar();
}

void suffix()
{
    foobar();
}

void MyFunction()
{
    prefix();
    suffix();
}

void MyFunctionWithABonus()
{
    prefix();
    doBonusStuff();
    suffix();
}