は、私たちがA
とB
は、ユーザー定義型である関数の2つのオーバーロードを、持っているとしますファクタリングアウトオーバーロードされた関数呼び出しは
void f(A &a, B *b);
void f(B *b);
我々はまた、アルゴリズムを実装する機能の対応のオーバーロードがあります
をこの場合、コードの重複を避けるためにf
への呼び出しを除外する方法はありますか?あなただけ(ファンクタとラムダの代わりに
バージョンをファンクタや抽象クラスを使用し、ラムダのようなC++ 11の機能を使用できない場合
template<typename T>
static function doAlg(T fct)
{
// Common code, use fct() instead of f(a,b) or f(b)
}
void alg(A &a, B*b)
{
doAlg([&a, b](){ f(a,b); }); // when doAlg call fct(), it will call f(a,b);
}
void alg(B*b)
{
doAlg([b](){ f(b); }); // when doAlg call fct(), it will call f(b);
}
:
http://stackoverflow.com/questions/6829241/perfect-forwarding-whats-it-all-about? – user3159253
@ user3159253この場合、完全転送がどのように役立つかわかりません。特に、パラメータの数は過負荷の間で変化することに注意してください。 – AlwaysLearning
どのコードを最小化しますか?ソースまたはコンパイル? 'alg(...)'はそれらの引数を 'f(...)'に渡すのとは別に使用しますか? – Deduplicator