2013-08-08 9 views
13

C++ 11のautoキーワードは、関数テンプレートと特殊化を置き換えることはできますか? 「はい」の場合は、単に関数パラメータをautoと入力するだけで、テンプレート関数と特殊化を使用する利点があります。もしそうでなければ、私は完全に地獄に落ちることを期待していますが、私はC++の初心者です。一言で言えば関数テンプレートと自動キーワードの比較

template <typename T> 
void myFunction(T &arg) 
{ 
    // ~ 
} 

void myFunction(auto &arg) 
{ 
    // ~ 
} 
+4

あなたは何かを知っていない(少なくともそれはそのようにすべきであり、大きくてもうまくいく)ために落ちることはありません。あなたは、しかし、研究をしないための汚い外見を期待することができます。これらのスニペットをコンパイルしてみましたか?ここにある 'auto'に関する既存の質問の1つを見ましたか? – delnan

+3

C++ 14の方法があります: 'auto myFunction = [](auto&arg){...};' – chris

答えて

8

autoは、関数の引数の実際の型を省略し、その関数テンプレートおよび/または過負荷に固執するための努力で使用することはできません。 autoは法的に自動的に変数の型を推定するために使用されます。

auto i=5; 

ただし、以下の違いを理解することは非常に注意してください:

auto x=... 
auto &x=... 
const auto &x=... 
auto *px=...; // vs auto px=... (They are equivalent assuming what is being 
       //     assigned can be deduced to an actual pointer.) 
// etc... 

また、接尾辞戻り値の型のために使用されます。

template <typename T, typename U> 
auto sum(const T &t, const U &u) -> decltype(t+u) 
{ 
    return t+u; 
} 
+0

それは、自動車が良いと良い99%の時間を要約することが重要です、時には停止する必要があります1秒間、実際に何をしているのか考えてみてください。http://stackoverflow.com/questions/12773257/does-auto-type-assignments-of-a-pointer-in-c11-requireポインタは自動。 – user2485710

+0

@ user2485710、あなたのコメントに基づいて私の答えに多くの情報を追加しました。 –

6

C++ 11のautoキーワードは、関数テンプレートとスペシャライゼーション?

いいえ、この目的のためにキーワードを使用する提案がありますが、C++ 11ではなく、C++ 14では関数テンプレートではなく多態性ラムダに対してのみ使用できると思います。

テンプレート関数と特殊化を使用する利点は、単に関数パラメータをautoと入力するだけで何が得られるかです。

タイプを参照する場合は、名前付きテンプレートパラメータが必要な場合があります。それはstd::remove_reference<decltype(arg)>::typeまたはそれ以上のものより便利でしょう。

関連する問題