web-dev-qa-db-ja.com

autoをC ++の引数として渡す方法はありますか?

Autoを別の関数の引数として渡す方法はありますか?

int function(auto data)
{
    //DOES something
}
35
user3639557

関数に任意の型を渡すことができることを意味する場合は、テンプレートにします。

template <typename T> int function(T data);

使用した構文を許可するC++ 17の提案があります(C++ 14が既に一般的なラムダに対して行っているように)が、まだ標準ではありません。

41
Mike Seymour

テンプレートは、通常の機能でこれを行う方法です。

template <typename T>
int function(T data)
{
    //DOES something
}

または、ラムダを使用できます。

auto function = [] (auto data) { /*DOES something*/ };
23
TartanLlama

私はそれがいつ変更されたのか分かりませんが、現在質問からの構文はc ++ 14で可能です:

https://coliru.stacked-crooked.com/a/93ab03e88f745b6c

それについての警告のみがあります:

g ++ -std = c ++ 14 -Wall -pedantic -pthread main.cpp && ./a.out main.cpp:5:15:警告:パラメーター宣言での 'auto'の使用は、-fconcepts void function(autoデータ)

C++ 11ではエラーがあります:

main.cpp:5:15:エラー:パラメーター宣言での 'auto'の使用は、-std = c ++ 14または-std = gnu ++ 14でのみ使用可能

1
Sebastian