ジェネリックプログラミングの精神で、私は次のコードを作成しました:それはテンプレート速記のように私には思えるので、私は、これは2つの異なる機能を生成し、静的のアドレスで伝えることができるものからautoをパラメータとして使用することに負の影響はありますか?
#include <iostream>
#include <functional>
class Functor
{
public:
void operator()()
{
std::cout << "Functor operator called." << std::endl;
}
};
void Function()
{
std::cout << "Function called." << std::endl;
}
void Call(auto & fp)
{
static int i;
std::cout << "Unified calling..." << &i << std::endl;
fp();
}
int main(int argc, char ** argv)
{
Functor functor;
std::function< void() > function = Function;
std::cout << "Begin testing..." << std::endl;
Call(functor);
Call(function);
std::cout << "End testing." << std::endl;
return 0;
}
Compiled with: g++ main.cpp -std=c++14
output:
Begin testing...
Unified calling...0x100402080
Functor operator called.
Unified calling...0x100402090
Function called.
End testing.
に、並べ替えの。私の本能は、複数の関数よりも保守する関数が優れているということですが、非共有の静的変数に注意するだけでなく、複数の関数定義ではなく、これを貧弱な選択にする可能性があります。
汎用ラムダでのみ使用できます...関数の場合、テンプレートを使用してください – WhiZTiM
これは非標準的な拡張子です。テンプレートの省略形です。[C++ 17標準に追加される可能性が高い] http://stackoverflow.com/questions/25879705/is-auto-as-a-parameter-in-a-regular-function-a-gcc-4-9-extension)。 C++の一部ではありません。 – HostileFork
@HostileFork C++にはない17。 – Barry