質問
関数の引数として関数を渡すためにstd::function
を
C++
1using namespace std; 2int fun(function<int(int)> inFun){ 3 return inFun(3); 4}
という風に使えると思うのですが、複数の引数に対応した形で
C++
1using namespace std; 2int fun(function<int,int(int)> inFun){ 3 return inFun(3,3); 4}
という風に書くとエラーが出ます。
C++日本語リファレンスや個人のブログ等で調べましたが、引数が1つのサンプルしかなく解決策を得られませんでした。
初歩的な質問で恐縮ですが、二つの引数を取る関数を引数として取る方法をご教示いただけますと幸いです。
コード全体
引数が1つの場合
C++:aiue.cpp
1#include<functional> 2using namespace std; 3int fun(function<int(int)> inFun){ 4 return inFun(3); 5} 6int num(int x){ 7 return x; 8} 9int main(){ 10 fun(num); 11} 12//エラー無し
引数が2つの場合
C++:aiue.cpp
1#include<functional> 2using namespace std; 3int fun(function<int,int(int)> inFun){ 4 return inFun(3,3); 5} 6int sum(int x,int y){ 7 return x+y; 8} 9int main(){ 10 fun(sum); 11} 12//コンパイルエラー
######エラーメッセージ
aiue.cpp:3:30: error: wrong number of template arguments (2, should be 1) 3 | int fun(function<int,int(int)> inFun){ | ^ In file included from /usr/include/c++/9/functional:59, from aiue.cpp:1: /usr/include/c++/9/bits/std_function.h:128:11: note: provided for ‘template<class _Signature> class std::function’ 128 | class function; | ^~~~~~~~ aiue.cpp: In function ‘int fun(int)’: aiue.cpp:4:21: error: ‘inFun’ cannot be used as a function 4 | return inFun(3,3); | ^ aiue.cpp: In function ‘int main()’: aiue.cpp:10:9: error: invalid conversion from ‘int (*)(int, int)’ to ‘int’ [-fpermissive] 10 | fun(sum); | ^~~ | | | int (*)(int, int) aiue.cpp:3:32: note: initializing argument 1 of ‘int fun(int)’ 3 | int fun(function<int,int(int)> inFun){ | ~~~~~~~~~~~~~~~~~~~~~~~^~~~~
######環境
Windows 10
Ubuntu 20.04 LTS on WSL2
gcc 9.3.0
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/24 00:28 編集